У нас странные ошибки в нашей производственной среде.
Ошибка:
MySQLIntegrityConstraintViolationException:
Cannot add or update a child row:
a foreign key constraint fails
('MSeHA_BARTLETT'.'document_version',
CONSTRAINT 'document_version_ibfk_1'
FOREIGN KEY ('document_id')
REFERENCES 'document' ('id')
ON DELETE CASCADE ON UPDATE CASCADE).
On SQL:
INSERT INTO 'document_version' SET
'document_id'='2002069',
'type_id'='2',
'subtype_id'='119091',
'status_id'='4',
'event_timestamp'='2012-02-08 15:02:00',
'provider_id'='1056'
ON DUPLICATE KEY UPDATE
'id'=LAST_INSERT_ID('id') ,
'type_id'='2',
'subtype_id'='119091',
'status_id'='4',
'provider_id'='1056'
С моим знанием mysql и внешних ключей у меня было несколько предположений.
стол был заблокирован. Я использовал cli, чтобы сделать это вручную через блокировку / разблокировку таблиц в середине транзакции, однако он просто терпеливо ждал, пока таблица не будет разблокирована и завершена ... так что не стоит.
поэтому document_version ссылается на документ, который должен быть уникальным. Возможно, две транзакции одновременно пытаются вставить один и тот же документ, и mysql выдаст разные идентификаторы. Это означало бы, что все будет работать нормально, но вторая транзакция будет пытаться завершиться, но документ не сможет выполнить ограничения уникального ключа, что сделает document_id недействительным? Таким образом, не хватает внешнего ключа? Я снова повторил это через cli, запустив 2 транзакции и позволив им вставить одну и ту же строку в документ. Снова mysql терпеливо ждал транзакции # 2, пока 1-я транзакция не завершилась, прежде чем позволить ей продолжить и допустить ошибку. Не проблема.
Я в растерянности. Любые идеи приветствуются.