【发布时间】:2012-10-11 13:04:53
【问题描述】:
我在mysql中做了一个数据库和10个表(表类型NONE) 而且我无法创建外键。一条警告消息说
SQLyog 所选表不支持外键。 表引擎必须是 InnoDB、PBXT 或 SolidDB
我现在必须改变我所有的桌子吗? 感谢您的任何提示或建议
【问题讨论】:
我在mysql中做了一个数据库和10个表(表类型NONE) 而且我无法创建外键。一条警告消息说
SQLyog 所选表不支持外键。 表引擎必须是 InnoDB、PBXT 或 SolidDB
我现在必须改变我所有的桌子吗? 感谢您的任何提示或建议
【问题讨论】:
通常,InnoDB 用于支持外键和事务:
http://dev.mysql.com/doc/refman/5.1/en/innodb.html
您可以随时更改表引擎:
ALTER TABLE tableName ENGINE = InnoDB;
您还可以更改默认值 -- 用于新创建的表 -- 如下所示:
http://dev.mysql.com/doc/refman/5.1/en/storage-engine-setting.html
【讨论】:
您使用的引擎不支持外键(正如错误消息清楚地告诉您的那样)。您可以更改正在使用的引擎
ALTER TABLE `tableName` ENGINE = newEngine;
【讨论】:
是的。默认存储引擎 (MyISAM) 不支持外键约束。
【讨论】:
MyISAM 引擎确实支持外键。它不支持外键约束。
您可以继续创建任意数量的外键 - 但不要指望数据库会为您强制执行完整性。
不要在没有经过大量测试的情况下更改应用程序中的引擎;更换引擎会影响行为,如果没有非常小心和大量 QA 工作,不建议这样做。特别是,如果出现以下情况,从 MyISAM 切换到 InnoDB 会破坏您的应用程序:
【讨论】:
在找到this post 之前,我遇到了同样的问题。
为了解决 MyISAM 或 NDB (Cluster) 的限制,约束 可以使用触发器强制执行。
【讨论】: