Mysql Can';不要删除或添加主键

Mysql Can';不要删除或添加主键,mysql,sql,Mysql,Sql,我有这张桌子: CREATE TABLE `event_schedule_tag` ( `event_schedule_id` bigint(20) NOT NULL,

我有这张桌子:

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\u schedule\u tag add主键(event\u schedule\u id,tag\u id)

我得到:
错误1062(23000):键“PRIMARY”的重复条目“1130915-260”

当我执行

alter table event\u schedule\u tag drop主键

我得到:
错误1091(42000):无法删除'PRIMARY';检查列/键是否存在

出路是什么

编辑:我把错误信息弄错了。我想它说的是“主键已经存在”,而它的意思是:“表中有重复项->不能创建主键”,这现在更有意义了。
我删除了重复项,并毫无问题地创建了主键。谢谢

由于数据重复,无法将约束添加到现有表中。假设您不想从现有表中删除任何内容,另一种方法是通过以下步骤执行:

  • 使用
    LIKE
    操作符创建另一个表(它的结构将与
    事件\计划\标记
    表相同)
  • 在该表上添加
    主键
    约束
  • 插入当前表到新表中的所有唯一行
  • 重命名表或更改后端以使用新表
  • 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;
    

    由于重复条目,从未创建主键。 所以,放弃它是没有意义的。
    主键需要具有唯一的值。因此,请先删除重复项以创建主键。

    由于重复项,主键未被创建。因此,尝试删除它没有意义。首先删除重复项。请参阅,这是您问题的答案。
    错误1062(23000):键“PRIMARY”的重复项“1130915-260”
    表示计划id 1130915与标记id 260项的组合不止一个。所以首先你应该先处理这种情况,然后才能创建两者的复合密钥。@Kapil哦,现在我明白了!我没有正确理解erorr,因为它说“已经有一个主键了”@JanKoutný我已经在答案中更新了我的评论。如果它对你有帮助,请升级投票或将其标记为答案。谢谢