mysql - titel - title tag definition




Wie kopiert man eine Zeile und fügt sie in dieselbe Tabelle mit einem Autoinkrement-Feld in MySQL ein? (8)

Ich habe eine Tabelle Eg- tab. Was ich versuche, ist das Kopieren einer Zeile mit einer Autoinkrement-Spalten-ID = 1 und das Einfügen der Daten in dieselbe Tabelle mit einer Zeilen- und Spalten-ID = 2.

Mit MySql. Wie kann ich dies in einer einzigen Abfrage tun? Bitte helfen Sie


Das hat mir sehr geholfen und unterstützt eine BLOB / TEXT-Spalte.

CREATE TEMPORARY TABLE temp_table
AS
SELECT * FROM source_table WHERE id=2;
UPDATE temp_table SET id=NULL' WHERE id=2;
INSERT INTO source_table SELECT * FROM temp_table;
DROP TEMPORARY TABLE temp_table;

Dump die Zeile, die Sie sql und dann verwenden Sie die generierte SQL, abzüglich der ID-Spalte, um es wieder zu importieren.


IMO, das Beste scheint SQL-Anweisungen zu verwenden, nur um diese Zeile zu kopieren, während gleichzeitig nur die Spalten referenziert werden, die Sie ändern müssen.

CREATE TEMPORARY TABLE temp_table ENGINE=MEMORY

SELECT * FROM your_table WHERE id=1;
UPDATE temp_table SET id=NULL; /* Update other values at will. */

INSERT INTO your_table SELECT * FROM temp_table;
DROP TABLE temp_table;

Siehe auch av8n.com - Wie man einen SQL-Datensatz klont

Leistungen:

  • Die SQL-Anweisungen 2 erwähnen nur die Felder, die während des Klonprozesses geändert werden müssen. Sie wissen nichts über andere Bereiche. Die anderen Felder fahren nur unverändert mit. Dies macht die SQL-Anweisungen einfacher zu schreiben, einfacher zu lesen, einfacher zu warten und erweiterbarer.
  • Es werden nur normale MySQL-Anweisungen verwendet. Keine anderen Werkzeuge oder Programmiersprachen sind erforderlich.
  • Ein vollständig korrekter Datensatz wird in your_table in einer atomaren Operation eingefügt.

Ich habe nach dem gleichen Feature gesucht, aber ich benutze kein MySQL. Ich wollte ALLE Felder kopieren, außer natürlich den Primärschlüssel (id). Dies war eine einmalige Abfrage, die in keinem Skript oder Code verwendet werden sollte.

Ich habe mich mit PL / SQL zurechtgefunden, aber ich bin mir sicher, dass jede andere SQL-IDE dies tun würde. Ich habe ein Basic gemacht

SELECT * 
FROM mytable 
WHERE id=42;

Dann exportiere es in eine SQL-Datei, in der ich das finden könnte

INSERT INTO table (col1, col2, col3, ... , col42) 
VALUES (1, 2, 3, ..., 42);

Ich habe es gerade bearbeitet und benutzt:

INSERT INTO table (col1, col2, col3, ... , col42) 
VALUES (mysequence.nextval, 2, 3, ..., 42);

Sie können auch "0" als Wert für die Spalte eingeben, die automatisch erhöht werden soll. Der korrekte Wert wird verwendet, wenn der Datensatz erstellt wird. Dies ist so viel einfacher als temporäre Tabellen.

Quelle: Kopieren von Zeilen in MySQL (siehe den zweiten Kommentar von TRiG zur ersten Lösung von Lore)


user(id, user_name, user_email) die Tabelle ist user(id, user_name, user_email) .

Sie können diese Abfrage verwenden:

INSERT INTO user (SELECT NULL,user_name, user_email FROM user WHERE id = 1)

INSERT INTO `dbMyDataBase`.`tblMyTable` 
(
    `IdAutoincrement`, 
    `Column2`, 
    `Column3`, 
    `Column4` 
) 

SELECT 
    NULL,  
    `Column2`, 
    `Column3`, 
    'CustomValue' AS Column4 
FROM `dbMyDataBase`.`tblMyTable` 
WHERE `tblMyTable`.`Column2` = 'UniqueValueOfTheKey' 
; 
/* mySQL 5.6 */

insert into MyTable(field1, field2, id_backup)
    select field1, field2, uniqueId from MyTable where uniqueId = @Id;




copy