mysql主键自动增量问题

时间:2012-10-16 07:20:04

标签: php mysql primary-key

我有一张桌子 {1}将entry_id设置为自动增量。但我忘了把(entry_id, user_id, event_id)作为主键。现在我有大约400个具有相同entry_id的条目。它没有增加。如何更改它以使entry_id是唯一的而不删除表?

如果我执行以下查询,我会丢失任何内容吗?

entry_id

请注意,我的所有ALTER TABLE your_table ADD PRIMARY KEY (entry_id); 都有1作为值。

7 个答案:

答案 0 :(得分:5)

尝试使用自动增量值创建一个新表,然后使用现有表(不包括具有错误键值的列)对INSERT SELECT进行新表。这应该自动填充密钥。最后,删除旧表并重命名新表。

答案 1 :(得分:2)

我认为,首先你应该运行一个循环遍历每一行的脚本,并以自动递增的方式设置entry_id。并运行查询

ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);

答案 2 :(得分:2)

您可以使用行号设置主键列:

update your_table set entry_id=@curRow;

答案 3 :(得分:2)

  1. 将所有entry_id值重置为NULL
  2. 创建字段entry_id PRIMARY + AUTO_INCREMENT,MySQL将为您做好准备。
  3. 这是一个脚本 -

    UPDATE your_table SET entry_id = NULL;
    
    ALTER TABLE your_table
      CHANGE COLUMN entry_id entry_id INT(11) NOT NULL AUTO_INCREMENT,
      ADD PRIMARY KEY (entry_id);
    

答案 4 :(得分:1)

您不会丢失任何内容,因为查询将无法运行:

mysql> alter table test add primary key (entry_id);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'

重新为entry_id列编号,或将整个表格复制到一个没有entry_id的新(正确)表格中,然后让它AUTO_INCREMENT

答案 5 :(得分:1)

始终拥有表的备份并在此查询中工作,它不会影响任何表。 此外,如果您拥有auto increment as 1,则在添加记录后,如果error as duplicate1 is exists,则会返回table。所以从{{1}开始会很简单用于auto_increment的entity_id的值,以避免此类重复值插入。

如果错了,请纠正我

答案 6 :(得分:1)

或者你可以分两步完成:

运行以下SQL以增加您的ID:

begin
declare entry_id_upd, numberOfRecords, cursor int;
set numberOfRecords = (select count(*) from mytable);
set cursor = 0;
while cursor <= numberOfRecords do
set entry_id_upd = ( select entry_id from mytable where id = cursor ) + 1;
update mytable set entry_id = entry_id_upd where id = cursor;
set cursor = ( cursor + 1 );
end while;
end

然后设置主键:

ALTER TABLE mytable ADD PRIMARY KEY (entry_id);