设置foreign_key_checks = 0不起作用MySQL 5.0

时间:2016-12-14 10:02:44

标签: mysql foreign-keys

我们不支持InnoDB数据库。因此,在从5.0迁移到MySQL 5.5之前,我希望将所有InnoDB表更改为MyISAM,但很多都有外键约束。

因此我想在执行(def app (noir.util.middleware/app-handler [your-routes] :formats [:json-kw])) 的会话级别禁用它,但外键仍然会出现相同的错误。

set foreign_key_checks=0

令人惊讶的:

mysql> SET foreign_key_checks = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> use sn;
Database changed
mysql> alter table facility engine='MyISAM';
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

MySQL 5.0 documentation显示变量确实存在。

mysql> SHOW Variables WHERE Variable_name='foreign_key_checks';
Empty set (0.00 sec)

mysql> SET foreign_key_checks = 0;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW Variables WHERE Variable_name='foreign_key_checks';
Empty set (0.00 sec)

1 个答案:

答案 0 :(得分:2)

正如foreign key constraint上的MySQL文档所述(突出显示是我的):

  

此外,如果表具有外键约束,则不能使用ALTER TABLE来更改表以使用其他存储引擎。 要更改存储引擎,必须先删除所有外键约束。

文档来自v5.5,但我认为这个限制也适用于v5.0。

更新

是的,我在Oracle网站上找到了v5.0手册,relevant section也说了同样的话:

  

此外,如果InnoDB表具有外键约束,则ALTER TABLE不能用于更改表以使用其他存储引擎。要更改存储引擎,必须先删除任何外键约束。