Я использую cleardb
для базы данных mysql в php
. И Ситуация примерно такая:Mysql: Нарушение ограничения целостности
Я добавляю запись в таблице beneficiary
. и после добавления, что я получаю last_inserted _id
. И используя это id
, чтобы добавить способ оплаты в beneficiary_payment_info
. Он отлично работает в большинстве случаев. Но, иногда я нашел ниже сообщение в журнале ошибок:
Integrity нарушение ограничения: 1452 Невозможно добавить или обновить дочернюю строку:. Ограничение внешнего ключа не удается (
cdb_85c337008c
beneficiary_payment_info
, скованностьbeneficiary_payment_info_ibfk_1
FOREIGN KEY (ben_id
) Литbeneficiary
(id
))
Когда я проверил в базе данных, я получил это скриншоты:
Как вы можете видеть, что есть идентификатор 6073
в первой таблице, но это не во второй таблице. Из-за этого я получаю ошибку выше. И есть две идентичные записи (6073 и 6081) в первой таблице, потому что пользователь запросил эту страницу во второй раз, я думаю.
Как я могу решить эту проблему? Пожалуйста, направляйте меня. Благодарю.
EDIT (Ответ от clearDB)
Лучший курс, чтобы решить эту проблему, чтобы остановить вовлекая значения AUTO_INCREMENT.
Вместо того, чтобы пытаться угадать или установить их, вы можете быть в состоянии использовать подзапрос, похожий на следующий стиль:
INSERT INTO CHILDREN (ParentID, FirstName, LastName)
VALUES ((SELECT ID FROM PARENTS WHERE FirstName = 'John' AND LastName = 'Doe'),
'Jane', 'Doe');
Ну записи фактически не являются идентичными, они имеют разные значения опорного столбца ... так же, что до сих пор представляют проблему? Удалась ли ваша функция вставки (можете ли вы увидеть данные, которые вы пытались вставить в таблицу?) –
, но проблема в том, что во второй таблице она не добавила идентификатор '6073' в качестве внешнего ключа. Теперь у меня есть 2 записи в базе данных. И тот, у которого id '6073', используется меньше. B'coz id не имеет способа оплаты во второй таблице. –
У вас есть чек, чтобы убедиться, что вы вставляете в таблицу «бенефициар», работали, прежде чем вставлять в таблицу «beneficiary_payment_info»? Эта вставка может иногда не срабатывать по какой-либо причине. –