在本文中,您将会了解到关于Oracle外键的新资讯,同时我们还将为您解释ForeignKey)之级联删除的相关在本文中,我们将带你探索Oracle外键的奥秘,分析ForeignKey)之级联删除的特点
在本文中,您将会了解到关于Oracle外键的新资讯,同时我们还将为您解释Foreign Key)之级联删除的相关在本文中,我们将带你探索Oracle外键的奥秘,分析Foreign Key)之级联删除的特点,并给出一些关于/ admin / auth / user / 11 / delete / FOREIGN KEY约束处的IntegrityError失败、Cannot delete or update a parent row: a foreign key constraint fails - 如何解决MySQL报错:父行有外键约束、django 中ForeignKey()中的on_delete参数(转)、Django 外键ForeignKey中的on_delete的实用技巧。
本文目录一览:- Oracle外键(Foreign Key)之级联删除(DELETE CASCADE)(oracle外键删除时删除数据)
- / admin / auth / user / 11 / delete / FOREIGN KEY约束处的IntegrityError失败
- Cannot delete or update a parent row: a foreign key constraint fails - 如何解决MySQL报错:父行有外键约束
- django 中ForeignKey()中的on_delete参数(转)
- Django 外键ForeignKey中的on_delete
Oracle外键(Foreign Key)之级联删除(DELETE CASCADE)(oracle外键删除时删除数据)
什么是级联删除(DELETE CASCADE)?
级联删除是指当主表(parent table)中的一条记录被删除,子表中关联的记录也相应的自动删除。
备注:外键字段在该表中为主键的表,即为主表;外键字段在该表中为普通字段的表,即为从表。
外键的级联删除可以在创建表时定义,也可以使用ALTER TABLE语法定义。
创建表时定义级联删除
语法:
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1,column2,...column_n)
REFERENCES parent_table (column1, column2,... column_n)
ON DELETE CASECADE
);
示例:
create table tb_supplier
(
supplier_id number not null,
supplier_name varchar2(50) not null,
contact_name varchar2(50),
CONSTRAINT pk_supplier PRIMARY KEY (supplier_id)
);
create table tb_products
(
product_id number not null,
product_name varchar2(100),
supplier_id number not null,
constraint fk_products_supplier
foreign key (supplier_id)
references tb_supplier(supplier_id)
on delete cascade
);
使用ALTER TABLE语法定义级联删除
语法:
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY (column1, column2,... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
ON DELETE CASCADE;
示例:
alter table tb_products
add constraint fk_products_supplier
foreign key(supplier_id)
references tb_supplier(supplier_id)
on delete cascade;
/ admin / auth / user / 11 / delete / FOREIGN KEY约束处的IntegrityError失败
这是由于on_delete = CASCADE。这意味着,如果删除了ForeignKey引用的对象,则它也应该删除引用对象。这样的CASCADE可以导致大量对象被删除,因为对象的删除实际上可以触发其他删除,依此类推。
尝试一下:
class Profile(models.Model):
user = models.OneToOneField(auth.models.User,null=True on_delete=models.SET_NULL)
Cannot delete or update a parent row: a foreign key constraint fails - 如何解决MySQL报错:父行有外键约束
如何解决MySQL报错:父行有外键约束,需要具体代码示例
在使用MySQL数据库进行开发时,我们经常会遇到一个报错信息:"Cannot delete or update a parent row: a foreign key constraint fails" (无法删除或更新父行:存在外键约束)。
这个错误信息通常出现在我们试图删除或更新一个被其他表中记录所引用的行时。这种情况下,MySQL会根据外键约束来阻止对父行的删除或更新操作。为了解决这个问题,我们需要对外键约束进行相应的处理。
下面将为大家提供一些解决这个问题的方法,并附带具体的代码示例。
- 删除相关的子行数据
在进行删除或更新操作之前,我们需要先删除与父行相关的子行数据。这可以通过设置外键的ON DELETE CASCADE属性来实现。当父行被删除时,所有引用该父行的子行也会被自动删除。
举个例子,假设我们有两个表:orders和order_items。order_items表的order_id字段是对orders表中订单的外键引用。当我们要删除orders表中的某个订单时,必须先删除order_items表中与该订单相关的子行数据。
具体代码示例如下:
CREATE TABLE orders( id INT PRIMARY KEY, order_name VARCHAR(50) ); CREATE TABLE order_items( id INT PRIMARY KEY, order_id INT, item_name VARCHAR(50), FOREIGN KEY (order_id) REFERENCES orders(id) ON DELETE CASCADE );
在上面的代码中,我们在创建order_items表时将order_id字段设置为对orders表的外键约束,并指定了ON DELETE CASCADE。这样,当我们删除orders表中的某个订单时,与该订单相关的order_items表中的记录也会被自动删除。
- 解除外键约束后删除
如果我们不希望设置ON DELETE CASCADE,或者无法删除与父行相关的子行数据,我们可以先解除外键约束,然后再进行删除操作。
具体代码示例如下:
ALTER TABLE order_items DROP FOREIGN KEY fk_order_items_order_id;
上面的代码中,我们使用ALTER TABLE语句来删除order_items表中对orders表的外键约束。
接下来,我们可以执行删除操作,如下所示:
DELETE FROM orders WHERE id = 1;
在执行上面的删除语句时,MySQL将不再验证与被删除行相关的外键约束,从而成功删除父行。
- 更新父行的值
在某些情况下,我们可能只想更新父行的值而不是删除它。在这种情况下,我们需要先更新与该父行相关的所有子行的外键引用,然后再更新父行的值。
具体代码示例如下:
UPDATE order_items SET order_id = 2 WHERE order_id = 1; UPDATE orders SET id = 2 WHERE id = 1;
在上面的代码中,我们首先更新order_items表中的外键引用,将之前引用父行ID为1的记录的order_id字段值更新为2。然后,我们再更新orders表中ID为1的记录的值为2。
通过这种方式,我们成功更新了父行的值。
总结:
当遇到MySQL报错:"Cannot delete or update a parent row: a foreign key constraint fails"时,我们可以通过删除与父行相关的子行数据、解除外键约束后删除或更新父行的值来解决这个问题。根据具体的业务需求和数据操作情况选择相应的处理方式,并合理编写代码来处理外键约束的问题。
以上就是Cannot delete or update a parent row: a foreign key constraint fails - 如何解决MySQL报错:父行有外键约束的详细内容,更多请关注php中文网其它相关文章!
django 中ForeignKey()中的on_delete参数(转)
1.django从1.9开始ForeignKey中的on_delete参数是必须的。
2.案例
代码:
from django.db import models
class Topic(models.Model):
"""用户学习主题"""
text = models.CharField(max_length=200)
data_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
"""返回模型的字符串表示"""
return self.text
class Entry(models.Model):
"""学到的有关某个主题的具体知识"""
topic = models.ForeignKey(Topic)
text = models.TextField()
data_added = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = ''entries''
def __str__(self):
"""返回模型的字符串表示"""return self.text[:50] + "..."
结果:
解决方案:
将foreignkey的on_delete属性设置为models.CASCADE,即将上面的
topic = models.ForeignKey(Topic) 改为
topic = models.ForeignKey(Topic,on_delete=models.CASCADE)
Django 外键ForeignKey中的on_delete
当你在Django中删除了一个有着外键关联的数据时,比如一个作者和他名下的所有的书的信息,书的外键是作者(一个作者可有好多本书),当你把作者的信息从数据库中删除时,Django提供了一下几个参数来对作者的书的数据进行操作
外键的定义:
1 #models.py
2 class Author(models.Model):
3 name = models.CharField(max_length=128)
4
5 class Books(models.Model):
6 name = models.CharField(max_length=128)
7 author = models.ForeignKey("Author", on_delete=models.CASCADE)
* CASCADE:删除作者信息一并删除作者名下的所有书的信息;
* PROTECT:删除作者的信息时,采取保护机制,抛出错误:即不删除Books的内容;
* SET_NULL:只有当null=True才将关联的内容置空;
* SET_DEFAULT:设置为默认值;
* SET( ):括号里可以是函数,设置为自己定义的东西;
* DO_NOTHING:字面的意思,啥也不干,你删除你的干我毛线关系
关于Oracle外键和Foreign Key)之级联删除的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于/ admin / auth / user / 11 / delete / FOREIGN KEY约束处的IntegrityError失败、Cannot delete or update a parent row: a foreign key constraint fails - 如何解决MySQL报错:父行有外键约束、django 中ForeignKey()中的on_delete参数(转)、Django 外键ForeignKey中的on_delete的相关信息,请在本站寻找。
本文标签: