我有一个表 (entry_id, user_id, event_id)
与entry_id设置为自动增量。但我忘记了把entry_id
作为主键。现在我有大约400个条目相同entry_id
。它没有增加。我如何改变它,使entry_id是唯一的,而不删除表?mysql主键自动增量问题
如果我做了以下查询,我会失去什么?
ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);
请注意,我所有的entry_id
s都有1个值。
我有一个表 (entry_id, user_id, event_id)
与entry_id设置为自动增量。但我忘记了把entry_id
作为主键。现在我有大约400个条目相同entry_id
。它没有增加。我如何改变它,使entry_id是唯一的,而不删除表?mysql主键自动增量问题
如果我做了以下查询,我会失去什么?
ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);
请注意,我所有的entry_id
s都有1个值。
entry_id
值设置为NULLentry_id
PRIMARY + AUTO_INCREMENT,MySQL将为您做些事情。这是一个脚本 -
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);
尝试使用自动增量值创建一个新表,然后将现有表(不包括具有不正确键值的列)的INSERT SELECT
转换为新表。这应该自动填充密钥。最后,放弃旧桌子并重命名新桌子。
我想,首先你应该运行一个脚本,它循环遍历每一行并以自动递增的方式设置entry_id。和运行查询
ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);
可以使用行号来设置主键列:
update your_table set [email protected];
你不会失去任何东西,因为查询将不会运行:
mysql> alter table test add primary key (entry_id);
ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY'
无论是重号的entry_id
栏,或在新的(正确的)表复制整个表,而不entry_id
,让它AUTO_INCREMENT
你。
始终有一个表的备份并在此查询中工作,它不会影响任何表。 此外,如果您有auto increment as 1
,则一旦添加记录,它将返回error as duplicate
如果在table
.so中,那么可以很简单地使用maximum
值auto_increment的entity_id来避免这种重复值插入。
纠正我,如果“错了
或者你可以这样做在两个步骤:
运行以下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);
我想这对我的测试表,并将其设置一切'NULL'。 –