create table as 和create table like的區別
對於MySQL的復制相同表結構方法,有create table as 和create table like 兩種,區別是什么呢?
/* -- 沒有開啟gtid的情況下,不拷貝數據,只創建一模一樣的表結構,包括索引約束等,結合insert語句可以實現復制一個表的結構和數據的目的 create table tbl_test_bak like tbl_test; insert into tbl_test_bak select * from tbl_test; -- 以下方式也可以創建表結構,包含數據,但是沒有索引約束等,所以不推薦再使用了。而且,在開啟gtid情況下,會報語法錯誤 create table tbl_test_bak as select * from tbl_test; */ -- drop table if exists tbl_test ; create table tbl_test ( id bigint(20) NOT NULL AUTO_INCREMENT, name varchar(20) NOT NULL, PRIMARY KEY (id), KEY idx_name (name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; insert into tbl_test(name) values('aaa'); insert into tbl_test(name) values('bbb'); insert into tbl_test(name) values('AAA'); insert into tbl_test(name) values('BBB'); mysql> select * from tbl_test; +----+------+ | id | name | +----+------+ | 1 | aaa | | 3 | AAA | | 2 | bbb | | 4 | BBB | +----+------+ 4 rows in set (0.00 sec) mysql> create table tbl_test_bak like tbl_test; Query OK, 0 rows affected (0.04 sec) mysql> select * from tbl_test_bak\G; Empty set (0.00 sec) ERROR: No query specified mysql> create table tbl_test_bak as select * from tbl_test; Query OK, 4 rows affected (0.03 sec) Records: 4 Duplicates: 0 Warnings: 0 mysql> show create table tbl_test_bak\G; *************************** 1. row *************************** Table: tbl_test_bak Create Table: CREATE TABLE `tbl_test_bak` ( `id` bigint(20) NOT NULL DEFAULT '0', `name` varchar(20) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 1 row in set (0.00 sec) ERROR: No query specified mysql> select * from tbl_test_bak; +----+------+ | id | name | +----+------+ | 1 | aaa | | 3 | AAA | | 2 | bbb | | 4 | BBB | +----+------+ 4 rows in set (0.00 sec)