MySQL关系数据库外键

时间:2011-03-06 07:54:13

标签: mysql database

要学习数据库,我正在创建一个电影数据库。

要将多个导演与电影相关联,我有以下架构:

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)

我有一个程序连接到需要将电影添加到数据库的数据库。

我可以轻松地向movie表和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)

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

看起来你有m_directs.dirID的外键设置为相同的表和列,而不是m_director.dirID

答案 1 :(得分:1)

当你写LAST_INSERT_ID()时,你的m_director上的插入查询没有被执行,所以最后一个insert_id将来自movie表..

或根据@rdamborsky

您将m_directs.dirID的外键设置为相同的表和列,而不是m_director.dirID