MySQL:ALTER IGNORE TABLE ADD UNIQUE,将被截断什么?

问题描述 投票:30回答:2

我有一个包含4列的表格:ID,类型,所有者,描述。 ID是AUTO_INCREMENT PRIMARY KEY,现在我要:

ALTER IGNORE TABLE `my_table`
    ADD UNIQUE (`type`, `owner`);

当然,我很少有类型为'Apple'且所有者='Apple CO'的记录。因此,我的问题是,哪条记录将是保留在该ALTER TABLE之后的特殊记录,ID最小的记录或最新插入的最大记录?

mysql alter-table unique-key
2个回答
45
投票

将保留第一条记录,其余的将被删除§§

IGNORE是MySQL的扩展标准SQL。它控制着如何改变如果上有重复项,则TABLE有效新表中的唯一键,如果当严格模式为已启用。如果未指定IGNORE,该副本将中止并在以下情况下回滚出现重复键错误。如果IGNORE指定,仅first行是用于重复的行唯一键,其他冲突的行是deleted。不正确的值是截断到最接近的匹配可接受的值

我猜这里的“第一个”是指ID最小的那个,假设ID是主键。

也请注意:

自MySQL 5.7.4起,IGNOREALTER TABLE子句已已删除,其使用产生了错误


0
投票

看来您的问题是不建议使用ALTER IGNORE的原因之一。

这是来自ALTER IGNORE弃用的MySQL notes

“此功能定义不正确(第一行是什么?),导致出现问题用于复制,禁用在线更改以创建唯一索引,并具有导致外键出现问题(在父表中删除了行)。“

© www.soinside.com 2019 - 2024. All rights reserved.