0

这是我的桌子....

 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 中的值...谢谢...

4

1 回答 1

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;
于 2013-09-20T11:26:39.653 回答