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

发布于 2024-10-27 22:14:10 字数 275 浏览 0 评论 0原文

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

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

当然,我有一些类型 = 'Apple' 且所有者 = 'Apple CO' 的记录。所以我的问题是哪一条记录将是 ALTER TABLE 之后保留的特殊记录,是 ID 最小的记录还是最新插入的 ID 最大的记录?

I have a table with 4 columns: ID, type, owner, description. ID is AUTO_INCREMENT PRIMARY KEY and now I want to:

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

Of course I have few records with type = 'Apple' and owner = 'Apple CO'. So my question is which record will be the special one to stay after that ALTER TABLE, the one with smallest ID or maybe the one with biggest as the latest inserted?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一生独一 2024-11-03 22:14:10

从 MySQL 5.7.4 开始,ALTER TABLEIGNORE 子句已被删除,并且使用它会产生错误

但对于支持IGNORE的旧版本MySQL,将保留第一条记录,其余删除

IGNORE 是 MySQL 的扩展
标准 SQL。它控制如何更改
如果有重复项,TABLE 就可以工作
新表中的唯一键或者如果
严格模式时会出现警告
已启用。如果未指定IGNORE
如果满足以下条件,则副本将中止并回滚
出现重复键错误。如果忽略
已指定,只有第一行是
使用具有重复项的行
唯一键,其他冲突行
删除。不正确的值是
截断为最接近的匹配
可接受的值

我猜测这里的“第一个”是指具有最小 ID 的值,假设 ID 是主键。

As of MySQL 5.7.4, the IGNORE clause for ALTER TABLE is removed and its use produces an error.

But for older versions of MySQL that support IGNORE, the first record will be kept, the rest deleted §§:

IGNORE is a MySQL extension to
standard SQL. It controls how ALTER
TABLE works if there are duplicates on
unique keys in the new table or if
warnings occur when strict mode is
enabled. If IGNORE is not specified,
the copy is aborted and rolled back if
duplicate-key errors occur. If IGNORE
is specified, only the first row is
used of rows with duplicates on a
unique key, The other conflicting rows
are deleted. Incorrect values are
truncated to the closest matching
acceptable value

I am guessing 'first' here means the one with the smallest ID, assuming the ID is the primary key.

满地尘埃落定 2024-11-03 22:14:10

看来您的问题是 ALTER IGNORE 被弃用的原因之一。

这是来自关于 ALTER IGNORE 弃用的 MySQL 注释

“此功能定义错误(第一行是什么?),会导致问题
对于复制,禁用在线更改以创建唯一索引并具有
导致外键问题(父表中删除的行)。”

It appears that your problem is one of the very reasons that ALTER IGNORE has been deprecated.

This is from the MySQL notes on the ALTER IGNORE deprecation:

"This feature is badly defined (what is the first row?), causes problems
for replication, disables online alter for unique index creation and has
caused problems with foreign keys (rows removed in parent table)."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文