这是我的桌子......
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中的值... 谢谢......
答案 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;