如何使用级联?我的工作没有用

时间:2013-09-17 10:19:30

标签: mysql sql database rdbms cascade

这是我的桌子......

 create table c1(id int primary key,name varchar(20));
 create table c2(iid int primary key,ename varchar(20),foreign key(iid) references       c1(id) on update cascade on delete cascade);

 insert into c1 values(1,'a');
 insert into c1 values(2,'b');

 insert into c2 values(1,'a')
 insert into c2 values(2,'b')

 update c1 set id=3 where id=1;
 update c1 set name='hello' where id=2;

当我更新时没有任何事情发生..

什么是实际级联,当我在c1上更新时,它实际上是否更新了c2表ID的值。

我实际上认为上面的更新查询应该更改c2的id值的值,其中id = 1 ...

如果我错了..请告诉我如何在c1更新时更新c2中的值... 谢谢......

1 个答案:

答案 0 :(得分:2)

在MySQL中,如果存储引擎是InnoDB,则支持此功能。其他存储引擎(如MyISAM)不强制执行约束(尽管MySQL允许使用“引用”语法,但它没有效果:http://dev.mysql.com/doc/refman/5.7/en/example-foreign-keys.html)。

检查存储引擎,例如c1表:

SHOW CREATE TABLE c1

检查默认情况下使用的存储引擎:

SHOW VARIABLES LIKE 'storage_engine'

检查是否实际执行了外键检查:

SHOW VARIABLES LIKE 'foreign_key_checks'

如果存储引擎不是InnoDB,您可以将MyISAM表转换为InnoDB,或者(因为这是一个玩具示例),您只需重新创建表。如果重新创建表,可以在CREATE TABLE命令的末尾指定存储引擎,也可以在创建表之前设置它,例如。

SET storage_engine=MYISAM;

同样,如果foreign_key_checks变量已关闭,您可以通过以下方式将其打开:

SET foreign_key_checks=1;