Да кажем, че вашата таблица има следните полета:
( pk_id int not null auto_increment primary key,
col1 int,
col2 varchar(10)
)
след това, за да копирате стойности от един ред в другия ред с нова стойност на ключа, следната заявка може да помогне
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;
Това ще генерира нова стойност за pk_id
поле и копирайте стойности от col1
и col2
от избрания ред.
Можете да разширите тази извадка, за да кандидатствате за повече полета в таблицата.
АКТУАЛИЗИРАНЕ :
С уважение към коментарите на JohnP и Martin -
Можем да използваме временна таблица, за да буферираме първо от основната таблица и да я използваме, за да копираме отново в основната таблица. Простото актуализиране на полето за pk референтна таблица във временната таблица няма да помогне, тъй като може вече да присъства в основната таблица. Вместо това можем да изхвърлим полето pk от временната таблица и да копираме всички останали в основната таблица.
С позоваване на отговора от Тим Рюсен в препоръчаната публикация :
CREATE TEMPORARY TABLE tmp SELECT * from my_table WHERE ...;
ALTER TABLE tmp drop pk_id; # drop autoincrement field
# UPDATE tmp SET ...; # just needed to change other unique keys
INSERT INTO my_table SELECT 0,tmp.* FROM tmp;
DROP TEMPORARY TABLE tmp;
Надявам се това да помогне.