如何解决Symfony2中的“完整性约束违规”,“外键约束失败”

时间:2014-03-11 09:29:55

标签: php mysql symfony doctrine-orm foreign-key-relationship

$ php app / console doctrine:schema:update --force
更新数据库架构......

[Doctrine\DBAL\DBALException]                                                
  An exception occurred while executing 'ALTER TABLE my_data_and_attribute
  ADD CONSTRAINT FK_44E5AE29CAA2B25 FOREIGN KEY (data_id) REFEREN  
  CES my_data (id)':                                                

  SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update   
  a child row: a foreign key constraint fails (`symfony`.`#sql-3e2_186`, CONSTR  
  AINT `FK_44E5AE29CAA2B25` FOREIGN KEY (`data_id`) REFERENCES `my_data` (`id`)) 

发生错误。
我最近从其他具有执行更新命令的数据库中替换了数据 所以,我认为错误的原因是我已经完成了替换数据 (我不知道它可能会因完全不同而导致什么。)

我也尝试改变phpMyAdmin的关系 但它失败了。

Error

SQL query:

ALTER TABLE `my_data_and_attribute` ADD FOREIGN KEY ( `data_id` ) REFERENCES `symfony`.`my_data` (
`id`
) ON DELETE CASCADE ON UPDATE RESTRICT ;

MySQL said: Documentation
#1452 - Cannot add or update a child row: a foreign key constraint fails (`symfony`.`#sql-3e9_1ea`, CONSTRAINT `#sql-3e9_1ea_ibfk_2` FOREIGN KEY (`data_id`) REFERENCES `my_data` (`id`) ON DELETE CASCADE) 

我无法理解这个错误信息 我应该在哪里检查?


symfony.my_data

#   Column  Type    Collation   Attributes  Null    Default     Extra         
1   id      int(11)                         No      None        AUTO_INCREMENT
// ...

Indexes:
Keyname Type    Unique  Packed  Column  Cardinality Collation   Null    Comment
PRIMARY BTREE   Yes     No      id      517         A

symfony.my_data_and_attribute

#   Column          Type    Collation   Attributes  Null    Default Extra
1   data_id         int(11)                         No      None    
2   attribute_id    int(11)                         No      None    

INDEXES
Keyname         Type    Unique  Packed  Column      Cardinality Collation   Null    Comment
PRIMARY         BTREE   Yes     No      data_id     483         A       
                                        attribute_id483         A   
data_id         BTREE   No      No      data_id     483         A       
attribute_id    BTREE   No      No      attribute_id37          A

关系视图

Column      Internal relation   Foreign key constraint (INNODB)
data_id                                                         // <- I can not set value this point.
attribute_id                    `symfony`.`my_attribute`.`id`   ON DELETE CASCADE ON UPDATE RESTRICT  

1 个答案:

答案 0 :(得分:0)

我可能需要两个create table语句才能正确回答,但my_data_and_attribute.data_id与my_data.id的字段类型不完全相同。 例如,如果其中一个字段是UNSIGNED而另一个字段不是,或者字段的大小不同,则会发生这种情况。