GBase8s如何在有外键关系的表中删除数据?

GBase8s如何在有外键关系的表中删除数据?,第1张

有两种方式:

1、先删除外键表中的数据,再删除当前数据

举例:

drop table if exists t1

drop table if exists t2

create table t1(id int primary key , s1 float)

create table t2(id int , id1 int ,s1 float,foreign key(id1) references t1(id) )

insert into t1 values(1,20)

insert into t1 values(2,30)

insert into t2 values(1,1,50)

--如果你直接删除t1的数据,则物塌报错

delete t1

692: Key value for constraint (root.u143_565) is still being referenced.

Error in line 1

Near character position 8

--需要先删除t2表中的数据,才能删除t1表中的数据

delete t2

delete t1

2、可以卖竖通过外键设置级联删除

--在设置外中蚂大键时,设置级联删除

drop table t2

drop table t1

create table t1(id int primary key , s1 float)

create table t2(id int , id1 int ,s1 float,foreign key(id1) references t1(id) on delete cascade)

insert into t1 values(1,20)

insert into t1 values(2,30)

insert into t2 values(1,1,50)

--此时删除t1的数据,则删除t1及t2中数据

>delete t1

2 row(s) deleted.

>select * from t2

idid1s1

No rows found.

先看On Delete属性,可能取值为:No Action, Cascade,Set Null, Restrict属性。

当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。

当取渗念值为Cascade时,则当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则也删除外键在子表(即包含外键的表)中的记录。

当取值为Set Null时,则当在父表(即外键的来源御瞎表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(不过这就要求该外键允许取null)。

当取值为No Action或者Restrict时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许更新。

当取值为Cascade时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也更新外键在子表(即包含外键的表)中的记录。

当取值为Set Null时,则当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中镇喊空该外键值为null(不过这就要求该外键允许取null)。

当某表被外键约束关联时,InnoDB不允许你删除该表,除非你执行了SET foreign_key_checks = 0命令。当LOAD DATA和ALTER TABLE *** 滑做作时设置foreign_key_checks为0是很有用的,可以避免外键检查提高效仔让森率。

foreign_key_checks从MySQL 3.23.52 and 4.0.3开始时可用的。

查看念亩当前FOREIGN_KEY_CHECKS的值可用如下命令

SELECT @@FOREIGN_KEY_CHECKS

禁用外键约束:SET FOREIGN_KEY_CHECKS=0

启动外键约束:SET FOREIGN_KEY_CHECKS=1

其他参考:

http://dev.mysql.com/doc/refman/4.1/en/innodb-foreign-key-constraints.html

MySQL之外键约束:

http://blog.csdn.net/cnjsnt_s/article/details/5548280


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11989854.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存