Der bessere Weg, um eine Tabelle zu duplizieren, besteht darin, nur die DDL
-Anweisung zu verwenden. Auf diese Weise können Sie unabhängig von der Anzahl der Datensätze in der Tabelle die Duplizierung sofort durchführen.
Mein Ziel ist:
DROP TABLE IF EXISTS table_name_OLD;
CREATE TABLE table_name_NEW LIKE table_name;
RENAME TABLE table_name TO table_name_OLD;
RENAME TABLE table_name _NEW TO table_name;
Dies vermeidet die Verwendung der INSERT AS SELECT
-Anweisung, die bei Tabellen mit vielen Datensätzen lange zur Ausführung benötigen kann.
Ich schlage außerdem vor, eine PLSQL-Prozedur wie im folgenden Beispiel zu erstellen:
DELIMITER //
CREATE PROCEDURE backup_table(tbl_name varchar(255))
BEGIN
-- DROP TABLE IF EXISTS GLS_DEVICES_OLD;
SET @query = concat('DROP TABLE IF EXISTS ',tbl_name,'_OLD');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- CREATE TABLE GLS_DEVICES_NEW LIKE GLS_DEVICES;
SET @query = concat('CREATE TABLE ',tbl_name,'_NEW LIKE ',tbl_name);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- RENAME TABLE GLS_DEVICES TO GLS_DEVICES_OLD;
SET @query = concat('RENAME TABLE ',tbl_name,' TO ',tbl_name,'_OLD');
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- RENAME TABLE GLS_DEVICES_NEW TO GLS_DEVICES;
SET @query = concat('RENAME TABLE ',tbl_name,'_NEW TO ',tbl_name);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END//
DELIMITER ;
Einen schönen Tag noch! Alex
4 Stimmen
Mögliche Duplikat von mysql create table auswählen und die Indizes automatisch kopieren
0 Stimmen
Auch der Primärschlüssel wird nicht kopiert, daher müssen Sie die Tabelle ändern und ihn anschließend einstellen.