【问题标题】:Mysql constraint violationMysql 约束违反
【发布时间】:2011-03-13 19:01:00
【问题描述】:

当我在我的另一个 MySQL 数据库上使用 Zend 项目时,它就像一个魅力。但是当我导出数据库并将其放在我的另一台服务器上时,同一个项目会出现以下错误:

Message: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`devel`.`Service`, CONSTRAINT `Service_ibfk_1` FOREIGN KEY (`customerId`) REFERENCES `customer` (`customerId`)) 

有人知道这是怎么回事吗?

【问题讨论】:

    标签: php mysql foreign-keys


    【解决方案1】:

    您要在表中插入/更新的值,主表customer 中缺少customerId 的值

    执行选择以查看该值是否存在。其中 100 是占位符值。

    select customerId from customer where customerId = 100;
    

    您需要先在客户表中创建customerId 值。

    【讨论】:

      【解决方案2】:

      好像有人忘记在导出中禁用foreign key checksmysqldump 通常默认包含它们)。

      如果服务器上数据正常,可以在导入前使用SET foreign_key_checks = 0;暂时禁用检查。

      在 MySQL 命令行中的正常使用是:

      SET foreign_key_checks = 0;
      SOURCE /path/to/sql/dump.sql;
      SET foreign_key_checks = 1;
      

      【讨论】:

        【解决方案3】:

        您是否完全使用表定义导出数据库?也许其他数据库中不存在外键定义。或者可能数据类型太小。如果您将 customerId 定义为 tinyint 并且值大于 255,则该值再次从 1 开始。如果子行查找该数字,如果由于此截断而找不到它。

        尝试查找错误发生在脚本中的哪一行,并尝试查找它尝试插入的 customerId 值是否已经存在。

        最重要的是先插入父表的数据,再插入外键的子表的数据!某些工具在将数据导出到 sql 脚本时会出现此顺序错误。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-07
          • 1970-01-01
          • 2016-04-24
          • 2020-04-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-31
          • 2023-03-28
          相关资源
          最近更新 更多