sql >> Database teknologi >  >> RDS >> Mysql

Kopiér række men med nyt id

Lad os sige, at din tabel har følgende felter:

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

derefter, for at kopiere værdier fra en række til den anden række med ny nøgleværdi, kan følgende forespørgsel måske hjælpe

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

Dette vil generere en ny værdi for pk_id felt og kopier værdier fra col1 og col2 af den valgte række.

Du kan udvide denne prøve til at ansøge om flere felter i tabellen.

OPDATERING :
Med respekt for kommentarerne fra JohnP og Martin -

Vi kan bruge midlertidig tabel til først at buffere fra hovedtabellen og bruge den til at kopiere til hovedtabellen igen. Blot opdatering af pk-referencefeltet i temp-tabellen vil ikke hjælpe, da det måske allerede er til stede i hovedtabellen. I stedet kan vi slippe pk-feltet fra temp-tabellen og kopiere alt andet til hovedtabellen.

Med henvisning til svaret af Tim Ruehsen i det henviste opslag :

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;

Håber dette hjælper.



  1. MySQL Indlæs datafil

  2. Tilføj List<int> til en mysql-parameter

  3. Udskrivning til skærm i .sql-fil postgres

  4. Få uforpligtende data i MySQL