Powiedzmy, że Twoja tabela ma następujące pola:
( pk_id int not null auto_increment primary key,
col1 int,
col2 varchar(10)
)
następnie, aby skopiować wartości z jednego wiersza do drugiego z nową wartością klucza, może pomóc następujące zapytanie
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;
To wygeneruje nową wartość dla pk_id
pole i skopiuj wartości z col1
i col2
wybranego wiersza.
Możesz rozszerzyć ten przykład, aby ubiegać się o więcej pól w tabeli.
AKTUALIZUJ :
Z szacunkiem do komentarzy Johna P i Martina -
Możemy użyć tabeli tymczasowej do buforowania najpierw z głównej tabeli i użyć jej do ponownego skopiowania do głównej tabeli. Zwykła aktualizacja pola referencyjnego pk w tabeli tymczasowej nie pomoże, ponieważ może już znajdować się w głównej tabeli. Zamiast tego możemy usunąć pole pk z tabeli tymczasowej i skopiować wszystkie pozostałe do tabeli głównej.
W nawiązaniu do odpowiedzi Tima Ruehsena w przesłanej publikacji :
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;
Mam nadzieję, że to pomoże.