我有一个包含4列的表: ID、类型、所有者、描述。ID是AUTO_INCREMENT主键,现在我想:
ALTER IGNORE TABLE `my_table`
ADD UNIQUE (`type`, `owner`);当然,我几乎没有type = 'Apple‘和owner = 'Apple CO’的记录。所以我的问题是,在ALTER TABLE之后,哪个记录将是保留的特殊记录,ID最小的记录,或者ID最大的记录作为最新插入的记录?
发布于 2011-03-28 16:49:52
第一条记录将保留,其余记录将被删除§§
SQL是对标准IGNORE的MySQL扩展。它控制如果新表中存在唯一键上的重复项,或者在启用严格模式时出现警告,ALTER TABLE如何工作。如果未指定IGNORE,则会在发生重复键错误时中止并回滚复制。如果指定了IGNORE,则唯一键上具有重复项的行只使用第一个删除行,其他冲突行为。不正确的值将被截断为最匹配的可接受值
我猜这里的“first”指的是ID最小的那个,假设ID是主键。
另请注意:
从MySQL 5.7.4开始,ALTER TABLE的IGNORE子句已删除,并且使用该子句会生成error.
发布于 2020-04-02 19:02:48
您的问题似乎是ALTER IGNORE被弃用的原因之一。
这来自ALTER IGNORE弃用上的MySQL notes:
此功能定义不正确(第一行是什么?),导致复制出现问题,禁用唯一索引创建的联机alter,并导致外键出现问题(父表中删除的行)。
https://stackoverflow.com/questions/5456520
复制相似问题