create table as 和create table like的區別


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM