我有这张桌子:
CREATE TABLE `event_schedule_tag` (
`event_schedule_id` bigint(20) NOT NULL,
`tag_id` bigint(20) NOT NULL,
KEY `event_schedule_id` (`event_schedule_id`),
KEY `tag_id` (`tag_id`),
CONSTRAINT `event_schedule_tag_ibfk_1` FOREIGN KEY (`event_schedule_id`) REFERENCES `event_schedule` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci
我想在两列上添加主键。但是当我执行
时 alter table event_schedule_tag add primary key(event_schedule_id, tag_id);
我得到:
ERROR 1062 (23000): Duplicate entry '1130915-260' for key 'PRIMARY'
当我执行
时 alter table event_schedule_tag drop primary key;
我得到:
ERROR 1091 (42000): Can't DROP 'PRIMARY'; check that column/key exists
出路是什么?
编辑:我收到错误消息错误。我虽然说'#34;主键已经存在"而意思是:"表中有重复 - >无法创建主键"这现在更有意义。 我删除了重复项并创建了主键,没有任何问题。谢谢!
答案 0 :(得分:0)
由于数据重复,您无法在现有表格中添加约束。假设您不想从现有表中删除任何内容,另一种方法是通过以下步骤来执行此操作:
LIKE
运算符创建另一个表(它将具有与event_schedule_tag
表相同的结构)primary key
约束Insert
从当前表到新表的所有唯一行SQL语句如下所示:
CREATE TABLE `event_schedule_tag_unique` LIKE `event_schedule_tag`;
ALTER TABLE event_schedule_tag_unique add primary key(event_schedule_id, tag_id);
INSERT INTO event_schedule_tag_unique (event_schedule_id, tag_id)
SELECT event_schedule_id, tag_id FROM event_schedule_tag
GROUP BY event_schedule_id, tag_id
HAVING COUNT(*) = 1;
RENAME TABLE event_schedule_tag TO event_schedule_tag_archive;
RENAME TABLE event_schedule_tag_unique TO event_schedule_tag;
答案 1 :(得分:0)
由于重复输入,从未创建主键。 所以,没有必要试图放弃它。 主键需要具有唯一值。因此,首先删除重复项以创建主键。