繁体   English   中英

转换为MyISAM,ʻforeign_key_checks = 0`不起作用

[英]Converting to MyISAM, `foreign_key_checks = 0` Not Working

我正在研究一些脚本,以编程方式自动执行数据库迁移,并且在我未设计,拥有或维护的系统中进行了一系列妥协之后,我需要将许多MySQL InnoDB表转换为MyISAM表。 但是,当我尝试更改表时

mysql> ALTER TABLE catalog_category_entity ENGINE=MyISAM;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails
mysql>

MySQL抱怨。 这是预期的。 但是,如果我禁用foreign_key_checks ,则会得到相同的结果

mysql> SET foreign_key_checks = 0;
mysql> ALTER TABLE catalog_category_entity ENGINE=MyISAM;
ERROR 1217 (23000): Cannot delete or update a parent row: a foreign key constraint fails

无论我在全局级别还是会话级别设置密钥检查,都会发生这种情况。 我认为这里的问题是问题表中有其他引用该表的InnoDB表,而MySQL拒绝以InnoDB表引用非InnoDB表的状态结束。 (我对此可能是不正确的,我很高兴得到纠正)

有没有一种快速的方法来处理这种情况? 我基本上希望数据库中的所有表都是MyISAM,而自己查找所有关系和/或手动删除约束似乎很耗时,而且计算机会更好。

如果答案是“做好准备,然后再做工作”,我很高兴听到专家的信息–我只是不想浪费时间,如果不需要的话。

如果这很重要,我将使用PHP编程语言,但对于需要其他语言的解决方案我感到很高兴。

MyISAM不支持外键。 更改引擎之前,请删除密钥:

> ALTER TABLE catalog_category_entity DROP FOREIGN KEY fk_name;
> ALTER TABLE catalog_category_entity ENGINE=MyISAM;

您可以通过以下方式找到外键名称:

> SHOW CREATE TABLE catalog_category_entity;

这可能会有所帮助: 删除数据库中的所有外键(MySql)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM