【问题标题】:Unique Index when data already exists数据已存在时的唯一索引
【发布时间】:2015-03-01 10:34:39
【问题描述】:

当我想添加一对一映射的新列时遇到了麻烦。它在该列上创建唯一索引,并且在执行 SQL 时显然失败,因为该表已经包含行。删除开发数据库中的数据不是问题,但它将在生产数据库中。

这就是 SQL 的样子:

  $this->addSql('CREATE TABLE program_settings (id INT AUTO_INCREMENT NOT NULL, booking_cancel VARCHAR(155) NOT NULL, booking_ahead VARCHAR(155) NOT NULL, created_at DATETIME NOT NULL, modified_at DATETIME NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB');
    $this->addSql('ALTER TABLE program ADD settings_id INT NOT NULL AFTER studio_id');
    $this->addSql('ALTER TABLE program ADD CONSTRAINT FK_92ED778459949888 FOREIGN KEY (settings_id) REFERENCES program_settings (id)');
    $this->addSql('CREATE UNIQUE INDEX UNIQ_92ED778459949888 ON program (settings_id)');

这种情况我该怎么办?

【问题讨论】:

  • 您的 SF2 或 Mysql 错误是什么?我认为问题可能来自您对 settings_id 列的 NOT NULL 约束。您可能想要删除此约束,更新您的数据库字段,然后放置您的 NOT NULL 约束。
  • 对不起,我忘记输入错误信息了,这里有:执行期间迁移 20150301104253 失败。错误执行“ALTER TABLE program ADD CONSTRAINT FK_92ED778459949888 FOREIGN KEY (settings_id) REFERENCES program_settings (id)”时发生异常:SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(@ 987654322@.#sql-580_4443,约束FK_92ED778459949888外键(settings_id)参考program_settingsid))

标签: php symfony doctrine migration unique


【解决方案1】:

我认为问题可能来自您对 settings_id 列的 NOT NULL 约束。

你必须:

  1. 在没有 NOT NULL 约束的情况下添加外键 (settings_id)
  2. 使用值更新所有外部字段 (settings_id)
  3. 使用 NOT NULL 约束更改您的外键 (settings_id)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2017-10-19
    相关资源
    最近更新 更多