2011-03-06 139 views
0

要學習數據庫,我正在創建一個電影數據庫。MySQL關係數據庫外鍵

要將多個董事與​​電影聯繫起來,我有以下模式:

movie(m_ID, ....) 

m_director(dirID, dirName)//dirID is a autoincrement primary key 

m_directs(dirID, m_ID) //dirID, m_ID are set as foreign Keys in the mysql 

database(InnoDB engine) 

我有一個連接到需要一部電影添加到數據庫數據庫的程序。

我可以很容易地添加一個新的條目到電影表和m_director表中,但我在添加m_directs表中的條目時遇到了問題。

INSERT INTO m_director (dirName) VALUES("Jason Reitman"); 
INSERT INTO m_directs (dirID, m_ID) VALUES(LAST_INSERT_ID(), "tt0467406"); 

我正在使用此sql語句插入新導演並將關聯添加到影片。我知道電影的主鍵,但我不知道dirID,因此我使用LAST_INSERT_ID()來獲取剛剛插入的導演的最後一個ID。

我遇到的問題是,我得到以下錯誤:

MySql.Data.MySqlClient.MySqlException (0x80004005): Cannot add or 
update a child row: a foreign key constraint fails (`siteproducts`. 
`m_directs`, CONSTRAINT `m_directs_ibfk_2` FOREIGN KEY (`dirID`) 
REFERENCES `m_directs` (`dirID`) ON DELETE CASCADE ON UPDATE CASCADE) 

任何想法?

+0

嘗試選擇LAST_INSERT_ID(),並確保它是您所期望的值,同時嘗試使用已知的良好值手動插入並查看哪個不正確。 – 2011-03-06 08:02:39

+1

我想你需要向我們展示'show create table m_director'和'show create table m_directs'的輸出結果。 – 2011-03-06 08:05:04

回答

2

看起來有外鍵m_directs.dirID設置爲相同的表和列,而不是m_director.dirID

+0

這就是問題所在,你怎麼接受這個笑話......第一次建立一個數據庫肯定會有一些小錯誤..非常感謝! – user623879 2011-03-06 08:19:41

1

爲u寫LAST_INSERT_ID(),但不執行上m_director你的插入查詢,所以最後INSERT_ID將來自movie表。 。

或按@rdamborsky

你有m_directs.dirID設置爲同一個表和列的外鍵,而不是m_director.dirID