一尘不染

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

mysql

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

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

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


阅读 403

收藏
2020-05-17

共1个答案

一尘不染

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

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

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

另请注意:

从MySQL 5.7.4开始,IGNOREfor子句ALTER TABLE删除 ,其使用产生 error

2020-05-17