我有一个
(entry_id, user_id, event_id)
entry_id 设置为自动递增的表。但我忘记了entry_id
作为主键。现在我有大约 400 个相同的条目entry_id
。它没有增加。如何更改它以使 entry_id 是唯一的而不删除表?
如果我执行以下查询,我会丢失任何东西吗?
ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);
请注意,所有 myentry_id
的值都为 1。
我有一个
(entry_id, user_id, event_id)
entry_id 设置为自动递增的表。但我忘记了entry_id
作为主键。现在我有大约 400 个相同的条目entry_id
。它没有增加。如何更改它以使 entry_id 是唯一的而不删除表?
如果我执行以下查询,我会丢失任何东西吗?
ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);
请注意,所有 myentry_id
的值都为 1。
尝试使用自动增量值创建一个新表,然后INSERT SELECT
将现有表(不包括具有不正确键值的列)放入新表中。那应该自动填充密钥。最后,删除旧表并重命名新表。
我认为,首先您应该运行一个脚本,该脚本循环遍历每一行并以自动递增的方式设置 entry_id。并运行查询
ALTER TABLE your_table
ADD PRIMARY KEY (entry_id);
您可以使用行号来设置您的主键列:
update your_table set entry_id=@curRow;
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);
您不会丢失任何东西,因为查询不会运行:
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
,一旦你添加记录,它会在.so中返回一个error as duplicate
if1 is exists
table
maximum
如果错了请纠正我
或者,您可以分两步执行此操作:
运行以下 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);