我有一个包含4列的表格:ID,类型,所有者,描述。 ID是AUTO_INCREMENT PRIMARY KEY,现在我要:
ALTER IGNORE TABLE `my_table`
ADD UNIQUE (`type`, `owner`);
当然,我很少有类型为'Apple'且所有者='Apple CO'的记录。因此,我的问题是,哪条记录将是保留在该ALTER TABLE之后的特殊记录,ID最小的记录或最新插入的最大记录?
将保留第一条记录,其余的将被删除§§:
IGNORE
是MySQL的扩展标准SQL。它控制着如何改变如果上有重复项,则TABLE有效新表中的唯一键,如果当严格模式为已启用。如果未指定IGNORE
,该副本将中止并在以下情况下回滚出现重复键错误。如果IGNORE
指定,仅first行是用于重复的行唯一键,其他冲突的行是deleted。不正确的值是截断到最接近的匹配可接受的值
我猜这里的“第一个”是指ID最小的那个,假设ID是主键。
也请注意:
自MySQL 5.7.4起,
IGNORE
的ALTER TABLE
子句已已删除,其使用产生了错误。
看来您的问题是不建议使用ALTER IGNORE的原因之一。
这是来自ALTER IGNORE弃用的MySQL notes:
“此功能定义不正确(第一行是什么?),导致出现问题用于复制,禁用在线更改以创建唯一索引,并具有导致外键出现问题(在父表中删除了行)。“