MySQL外部约束不一致

时间:2012-02-09 16:01:44

标签: mysql database foreign-keys

我们的生产环境出现了奇怪的错误。

错误是:

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和外键的了解,我有一些假设。

  1. 桌子已被锁定。我使用cli手动通过锁定/解锁表中间事务来执行此操作,但它只是耐心等待,直到桌子解锁并完成...所以不要去。

  2. 所以document_version引用的文档必须是唯一的。也许2个事务同时尝试插入相同的文件,而mysql会返回不同的ID。 Thsi意味着一个工作正常,但第二个事务将尝试完成,但文档将失败唯一键约束,使document_id无效?因此外键失败了吗?同样,我通过启动2个事务重新通过cli实现了这个,并让它们都将同一行插入到文档中。同样,mysql耐心地等待事务#2,直到第一个事务完成,然后让它继续并且出错。不是问题。

  3. 我很茫然。任何想法都表示赞赏。

0 个答案:

没有答案