Внешний ключ реляционной базы данных MySQL - PullRequest
0 голосов
/ 06 марта 2011

Чтобы изучить базу данных, я создаю базу данных фильмов.

Чтобы связать несколько режиссеров с фильмом, у меня есть следующая схема:

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(), чтобы получить последний идентификатор только что вставленного режиссера.

Проблема, с которой я столкнулся, заключается в том, чтоЯ получаю следующую ошибку:

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 ]

2 голосов
/ 06 марта 2011

Похоже, у вас есть внешний ключ для m_directs.dirID, установленный для той же таблицы и столбца, а не для m_director.dirID

1 голос
/ 06 марта 2011

при записи LAST_INSERT_ID(), но ваш запрос вставки на m_director не выполнен, поэтому последний insert_id будет получен из movie таблицы ..

или согласно @ rdamborsky

у вас есть внешний ключ для m_directs.dirID, установленный для той же таблицы и столбца, а не для m_director.dirID

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...