Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Skopiuj wiersz, ale z nowym identyfikatorem

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Napraw wszystkie stoły za jednym razem

  2. mysql nie jest rozpoznawany jako polecenie wewnętrzne lub zewnętrzne, działający program lub wsad

  3. PacketTooBigException podczas przeprowadzania analizy sonaru

  4. Jak mogę przekazać tablicę parametrów PDO, a jednocześnie określić ich typy?

  5. Aktualizacja wpisu BEZ aktualizacji znacznika czasu