为什么我的桌子不支持FOREIGN KEYS?

时间:2009-10-31 19:53:27

标签: sql mysql

我在mysql中创建了一个数据库和10个表(表类型为NONE) 我无法创建外键。提示信息

SQLyog的 所选表格不支持外键。 表引擎必须是InnoDB,PBXT或SolidDB

我现在必须改变我的所有牌桌吗? 感谢任何提示或建议

5 个答案:

答案 0 :(得分:15)

通常,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

答案 1 :(得分:8)

您正在使用的引擎不支持外键(因为错误消息显然告诉您)。您可以使用

更改正在使用的引擎
ALTER TABLE `tableName` ENGINE = newEngine;

答案 2 :(得分:4)

是。默认存储引擎(MyISAM)不支持外键约束。

答案 3 :(得分:3)

MyISAM引擎支持外键。它不支持的是外键约束。

您可以继续创建任意数量的外键 - 但不要指望数据库为您强制执行完整性。

如果没有经过重大测试,请勿更改应用中的引擎;更换引擎会影响行为,不建议不经过精心设计和大量的QA工作。特别是,如果出现以下情况,从MyISAM切换到InnoDB会破坏您的应用程序:

  • 它不能正确处理死锁(在MyISAM上不会发生死锁)
  • 它需要表级锁定
  • 它依赖于(主要是可疑的)MyISAM功能
  • 这是高性能,你还没有理解如何正确调整InnoDB,但确实调整了MyISAM(或确定)
  • 您尚未评估切换引擎对磁盘空间的影响

答案 4 :(得分:1)

我遇到同样的问题,直到找到this post

  

用于解决MyISAM或NDB(Cluster)的限制,约束   可以使用触发器强制执行。