我有一个包含4列的表:ID,类型,所有者,描述。 ID是AUTO_INCREMENT PRIMARY KEY,现在我想:
ALTER IGNORE TABLE `my_table`
ADD UNIQUE (`type`, `owner`);
当然我的记录很少有type ='Apple'和owner ='Apple CO'。所以我的问题是哪个记录将成为ALTER TABLE之后留下的特殊记录,一个ID最小的记录,或者最新插入的记录是最新的记录?
答案 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弃用的信息开始的:
“此功能定义不正确(第一行是什么?),导致出现问题 用于复制,禁用在线更改以创建唯一索引,并具有 导致外键出现问题(在父表中删除了行)。“