CLONE TABLE trong SQL

CLONE TABLE trong SQL sử dụng trong tình huống khi bạn chỉ muốn tạo một bản sao chính xác hoặc bản sao của một bảng hiện có để kiểm tra hoặc thực hiện một thao tác gì đó mà không ảnh hưởng đến bảng gốc.

Nếu bạn đang sử dụng MySQL RDBMS, bạn có thể thực hiện việc này bằng cách tuân theo các bước dưới đây:

  • Sử dụng lệnh SHOW CREATE TABLE để nhận câu lệnh CREATE TABLE xác định cấu trúc, chỉ mục của bảng nguồn và tất cả những gì liên quan.
  • Sửa đổi câu lệnh trên và thay đổi tên bảng của Clone table và thực thi câu lệnh đó. Bằng cách này bạn sẽ có một bảng bản sao chính xác.
  • Tùy chọn, nếu bạn cần nội dung bảng được sao chép, sử dụng câu lệnh INSERT INTO hoặc SELECT.

Ví dụ minh họa cách sử dụng CLONE TABLE

Ví dụ tạo một bảng nhân bản cho TEST_TBL có cấu trúc như sau:

Bước 1: Tạo bảng có cấu trúc hoàn chỉnh

SQL> SHOW CREATE TABLE TUTORIALS_TBL \G; 
 *************************** 1. row *************************** 
       Table: TUTORIALS_TBL 
 Create Table: CREATE TABLE 'TUTORIALS_TBL' ( 
   'tutorial_id' int(11) NOT NULL auto_increment, 
   'tutorial_title' varchar(100) NOT NULL default '', 
   'tutorial_author' varchar(40) NOT NULL default '', 
   'submission_date' date default NULL, 
   PRIMARY KEY  ('tutorial_id'), 
   UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
 ) TYPE = MyISAM 
 1 row in set (0.00 sec)

Bước 2: Đổi tên bảng này và tạo một bảng khác.

SQL> CREATE TABLE `CLONE_TBL` ( 
   -> 'tutorial_id' int(11) NOT NULL auto_increment, 
   -> 'tutorial_title' varchar(100) NOT NULL default '', 
   -> 'tutorial_author' varchar(40) NOT NULL default '', 
   -> 'submission_date' date default NULL, 
   -> PRIMARY KEY  (`tutorial_id'), 
   -> UNIQUE KEY 'AUTHOR_INDEX' ('tutorial_author') 
 -> ) TYPE = MyISAM; 
 Query OK, 0 rows affected (1.80 sec) 
 

Bước 3: Sau khi thực hiện bước 2, nếu bạn muốn sao chép dữ liệu từ bảng cũ thì sử dụng câu lệnh INSERT INTO… SELECT.

SQL> INSERT INTO CLONE_TBL (tutorial_id, 
    ->                        tutorial_title, 
    ->                        tutorial_author, 
    ->                        submission_date) 
    -> SELECT tutorial_id,tutorial_title, 
    ->        tutorial_author,submission_date, 
    -> FROM TUTORIALS_TBL; 
 Query OK, 3 rows affected (0.07 sec) 
 Records: 3  Duplicates: 0  Warnings: 0 

Cuối cùng, bạn sẽ có một bảng clone như ý muốn.