SQL - Bảng sao chép
Có thể có tình huống khi bạn cần một bản sao chính xác của một bảng và TẠO BẢNG ... 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 giống nhau, v.v.
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 thủ các bước được đưa ra bên dưới:
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 và tất cả của bảng nguồn.
Sửa đổi câu lệnh để thay đổi tên bảng thành tên của bảng sao chép và thực hiện câu lệnh. Bằng cách này, bạn sẽ có một bảng sao chép chính xác.
Theo tùy chọn, nếu bạn cũng cần sao chép nội dung bảng, hãy đưa ra câu lệnh CHÈN VÀO hoặc CHỌN.
Thí dụ
Hãy thử ví dụ sau để tạo bảng sao chép cho TUTORIALS_TBL có cấu trúc như sau:
Step 1 - Nhận cấu trúc hoàn chỉnh về bảng.
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)
Step 2 - Đổi tên bảng này và tạo 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)
Step 3- Sau khi thực hiện bước 2, bạn sẽ nhân bản một bảng trong cơ sở dữ liệu của mình. 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.
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 sao chép chính xác như bạn muốn.