外键约束不受尊重

时间:2011-05-13 13:29:54

标签: mysql

我最近换了工作,在这家新公司我们正在使用MySQL。我没有任何关于MySQL的经验,尽管我已经使用SQL Server和Oracle超过4年了。 现在我用MySQL看到的奇怪的事情是它似乎没有考虑一些基本的东西,如外键约束(意思是一个列是一个外键,但我可以在这里插入任何值,无论它是否存在于另一个表中这个FK相关)。现在我知道在SQL Server中存在NOCHECK foriegn键约束的这个概念,但负责MySQL db的新公司的人说,不尊重FK在MySQL中是正常的,它不需要任何特殊设置(如NOCHECK FK约束)。

我无法理解,在数据库系统中,如何在不进行这些基本检查的情况下确保参考整合。我不确定本地mySQL“专家”是否知道这一点,或者只是mySQL确实不尊重FK规则。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

检查您的表是否正在使用InnoDB引擎。使用MyISAM引擎时(直到最近才是默认设置),不会强制执行外键声明。

答案 1 :(得分:2)

MySQL有不同的数据库引擎 -

  • MyISAM - 默认,无FK支持
  • InnoDB - 有FK支持 - 但没有像MyISAM那样的全文搜索

在两个引擎上你都可以创建表并尝试创建FK,但MyISAM会忽略它。

答案 2 :(得分:0)

此外,确保强制执行外键。出于某种原因,他们不在我的身上,导致一周的头痛!

检查:

SELECT @@FOREIGN_KEY_CHECKS

设置:

SET FOREIGN_KEY_CHECKS=1