数据已存在时的唯一索引

Unique Index when data already exists

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

这是 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)');

遇到这种情况怎么办?

我认为问题可能出在 settings_id 列上的 NOT NULL 约束。

你必须:

  1. 添加没有 NOT NULL 约束的外键 (settings_id)
  2. 用值
  3. 更新你所有的外国字段(settings_id)
  4. 用 NOT NULL 约束改变你的外键 (settings_id)