2011-05-13 160 views
1

我最近換了工作,在這家新公司我們使用的是MySQL。儘管我已經使用SQL Server和Oracle超過4年了,但我對MySQL沒有任何期望。 現在我看到的MySQL的奇怪之處在於,它似乎沒有像外鍵約束(這意味着列是外鍵,但我可以在這裏插入任何值,無論它是否存在於其他表中這與FK有關)。現在我知道在SQL Server中有一個NOCHECK foriegn關鍵約束的概念,但是負責MySQL db的新公司中的人表示,不尊重FK在MySQL中是正常的事情,並且它不需要任何特殊設置(如NOCHECK FK約束)。不尊重外鍵約束

我不明白在一個數據庫系統中,如果沒有這些基本檢查,你如何確保引用整合。我不確定本地的mySQL「專家」是否知道它,或者只是說mySQL真的不尊重FK規則。有什麼想法嗎?

回答

3

檢查您的表是否使用InnoDB引擎。當使用MyISAM引擎(直到最近這是默認值)時,外鍵聲明不被執行。

+0

我如何檢查?記住我對mySQL是全新的 –

+0

'show create table foo;' –

2

的MySQL有不同的數據庫引擎 -

  • 的MyISAM - 缺省情況下,FK支持
  • InnoDB的 - 有FK的支持 - 但是就像在MyISAM中

兩臺發動機可以沒有全文檢索創建表並嘗試創建FK,但MyISAM將簡單地忽略它。

0

此外,確保外鍵正在執行。出於某種原因,他們不在我的身上,導致頭痛一週!

檢查:

SELECT @@FOREIGN_KEY_CHECKS 

集:

SET FOREIGN_KEY_CHECKS=1