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

时间:2011-03-28 08:41:32

标签: mysql alter-table unique-key

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

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

当然我的记录很少有type ='Apple'和owner ='Apple CO'。所以我的问题是哪个记录将成为ALTER TABLE之后留下的特殊记录,一个ID最小的记录,或者最新插入的记录是最新的记录?

2 个答案:

答案 0 :(得分:42)

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

  

IGNORE是MySQL的扩展名   标准SQL。它控制ALTER的方式   如果有重复项,TABLE可以工作   新表中的唯一键或if   严格模式时会发出警告   启用。如果未指定IGNORE,   如果,副本被中止并回滚   发生重复键错误。如果IGNORE   指定时,只有第一个行   在a上使用带有重复项的行   唯一键,其他冲突行   已删除。值不正确   截断到最接近的匹配   可接受的价值

我猜这里'第一'意味着ID最小的那个,假设ID是主键。

另请注意:

  

自MySQL 5.7.4起,IGNORE的{​​{1}}条款被删除,其使用会产生错误

答案 1 :(得分:2)

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

这是从MySQL notes关于ALTER IGNORE弃用的信息开始的:

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