sql >> Databáze >  >> RDS >> Mysql

Zkopírujte řádek, ale s novým ID

Řekněme, že vaše tabulka má následující pole:

( pk_id int not null auto_increment primary key,
  col1 int,
  col2 varchar(10)
)

pak pro zkopírování hodnot z jednoho řádku do druhého s novou hodnotou klíče může pomoci následující dotaz

insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;

Tím se vygeneruje nová hodnota pro pk_id pole a zkopírujte hodnoty z col1 a col2 vybraného řádku.

Tento příklad můžete rozšířit a použít pro více polí v tabulce.

AKTUALIZACE :
S náležitým respektem ke komentářům od JohnaP a Martina -

Můžeme použít dočasnou tabulku k vyrovnávací paměti nejprve z hlavní tabulky a použít ji ke zkopírování do hlavní tabulky znovu. Pouhá aktualizace referenčního pole pk v dočasné tabulce nepomůže, protože může být již přítomno v hlavní tabulce. Místo toho můžeme vypustit pole pk z dočasné tabulky a zkopírovat všechny ostatní do hlavní tabulky.

S odkazem na odpověď od Tim Ruehsen v doporučeném příspěvku :

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;

Doufám, že to pomůže.



  1. Úlohu MySQL se nepodařilo spustit

  2. Získejte hodnoty z databáze pomocí PHP PDO a aktualizujte vstup na zaškrtnuté

  3. otázka oddělovače mysql

  4. Microsoft SQL Server 2005/2008:datový typ XML vs text/varchar