数据已存在时的唯一索引


Unique Index when data already exists

当我想添加映射为"一对一"的新列时,遇到了麻烦。它在该列上创建唯一索引,在执行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)');

那样的话我该怎么办?

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

你必须:

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