【发布时间】:2016-07-19 17:33:07
【问题描述】:
我有下表用于跟踪正在观看支持票的用户
CREATE TABLE IF NOT EXISTS crm_ticketwatcher (
ticketid int(10) unsigned NOT NULL DEFAULT '0',
employeeid int(10) unsigned NOT NULL DEFAULT '0',
contactid int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (ticketid,employeeid,contactid)
) ENGINE=MyISAM;
我想要一个从主键中删除 contactid 的降级脚本。
表格内容有点像这样
ticketid|employeeid|contactid
--------|----------|---------
5 |5 |0
5 |8 |0
5 |0 |2
5 |0 |3
当我运行我的(不成功的)降级脚本时,
ALTER TABLE crm_ticketwatcher DROP PRIMARY KEY, ADD PRIMARY KEY (ticketid, employeeid);
我收到以下错误:
ERROR 1062 (23000) at line 1: Duplicate entry '306-0' for key 'PRIMARY'
因为现在有 2 行设置了主键 (5, 0)
从表中删除其他行并保存最后出现的行的最佳方法是什么?
我们使用的是 MySQL 5.7.13,因此 IGNORE 关键字不是一个选项。
谢谢。
【问题讨论】:
-
您能否告诉我您将获得“最后出现”信息的表的结构?喜欢日期。或者您只想保留最高或最低的联系方式行?你保留的是 (5, 0, 2) 还是 (5, 0, 3)?
-
(5, 0, 3) 将被保留,因为它是最低行
-
我认为 Eggyal 的回答应该适用于这种情况。
-
它适用于这种情况,因为 3 恰好大于 2,但在完整表中,最低行的 contactid 没有显示这一点。
标签: mysql database primary-key database-migration composite-primary-key