数据已存在时的唯一索引
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 约束。
你必须:
- 添加没有 NOT NULL 约束的外键 (settings_id)
- 用值
更新你所有的外国字段(settings_id)
- 用 NOT NULL 约束改变你的外键 (settings_id)
当我想添加一对一映射的新列时,我 运行 遇到了麻烦。它在该列上创建唯一索引,并且在执行 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 约束。
你必须:
- 添加没有 NOT NULL 约束的外键 (settings_id)
- 用值 更新你所有的外国字段(settings_id)
- 用 NOT NULL 约束改变你的外键 (settings_id)