Nhân bản hay clone table trong SQL. Có thể có một tình huống khi bạn cần bản sao chính xác của bảng và tạo bảng bằng lệnh CREATE TABLE ... hoặc các lệnh SELECT ... không phù hợp với mục đích của bạn vì bản sao phải bao gồm các chỉ mục, giá trị mặc định và vv.
Nếu bạn đang sử dụng MySQL RDBMS, bạn có thể xử lý tình huống 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 bảng nhân bản và thực thi câu lệnh đó. Bằng cách này bạn sẽ có một bảng nhân bản chính xác.
- Tùy chọn, nếu bạn cần nội dung bảng được sao chép, cũng sẽ đưa ra một câu lệnh INSERT INTO hoặc SELECT.
Nội dung chính
Ví dụ
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 - Lấy cấu trúc hoàn chỉnh về bảng.
SHOW CREATE TABLE TEST_TBL \G; *************************** 1. row *************************** Table: TEST_TBL Create Table: CREATE TABLE 'TEST_TBL' ( 'vt_id' int(11) NOT NULL auto_increment, 'vt_title' varchar(100) NOT NULL default '', 'vt_author' varchar(40) NOT NULL default '', 'submission_date' date default NULL, PRIMARY KEY ('vt_id'), UNIQUE KEY 'AUTHOR_INDEX' ('vt_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.
CREATE TABLE `CLONE_TBL` ( -> 'vt_id' int(11) NOT NULL auto_increment, -> 'vt_title' varchar(100) NOT NULL default '', -> 'vt_author' varchar(40) NOT NULL default '', -> 'submission_date' date default NULL, -> PRIMARY KEY (`vt_id'), -> UNIQUE KEY 'AUTHOR_INDEX' ('vt_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ừ một bảng cũ, thì bạn có thể thực hiện bằng cách sử dụng câu lệnh INSERT INTO ... SELECT.
INSERT INTO CLONE_TBL (vt_id, -> vt_title, -> vt_author, -> submission_date) -> SELECT vt_id,vt_title, -> vt_author,submission_date, -> FROM TEST_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 chính xác được clone như bạn muốn có.