【问题标题】:MySQL ALTER TABLE creating: 'Integrity constraint violation: 1452'MySQL ALTER TABLE 创建:'完整性约束违规:1452'
【发布时间】:2012-02-26 11:26:15
【问题描述】:

下面的代码在执行时会产生以下错误:

致命错误:未捕获的异常“PDOException”,带有消息“SQLSTATE[23000]:违反完整性约束:1452 无法添加或更新子行:外键约束失败

$db->executeUpdate('CREATE TABLE submission_statuses (name VARCHAR(255) NOT NULL, 
                    weight INT NOT NULL, PRIMARY KEY(name)) ENGINE = InnoDB');
$db->executeUpdate('ALTER TABLE submissions ADD CONSTRAINT IDX_4 
                    FOREIGN KEY (status) REFERENCES submission_statuses(name)');
$db->executeUpdate('CREATE INDEX IDX_4 ON submissions (status)');

这两个表都使用 InnoDB 引擎。

【问题讨论】:

  • 这与错误无关,但您应该知道没有必要为外键列添加索引。从 MySQL 4.1.2 开始,如果索引不存在,创建外键约束会自动创建索引。

标签: mysql alter-table


【解决方案1】:

submissions 包含一个在status 列中的值,该值在新创建的submission_statuses 表中不存在。必须在创建约束之前填充submission_statuses 表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2014-06-15
    • 2012-09-19
    • 2015-11-27
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    相关资源
    最近更新 更多