在MySQL数据库中,关于表的克隆有多种方式,比如我们可以使用create table ..as .. ,也可以使用create table .. like ..方式。然而这2种不同的方式还是有些差异的,他的差异到底在哪里呢,本文通过演示对此展开描述。
1、mysql sakila表上的结构
--actor表状态
robin@localhost[sakila]> show table status like 'actor'\G
*************************** 1. row ***************************
? ? ? ? ? Name: actor
? ? ? ? Engine: InnoDB
? ? ? ? Version: 10
? ? Row_format: Compact
? ? ? ? ? Rows: 200
?Avg_row_length: 81
? ? Data_length: 16384
Max_data_length: 0
? Index_length: 16384
? ? ? Data_free: 0
?Auto_increment: 201
? ? Create_time: 2014-12-25 13:08:25
? ? Update_time: NULL
? ? Check_time: NULL
? ? ? Collation: utf8_general_ci
? ? ? Checksum: NULL
?Create_options:
? ? ? ? Comment:
1 row in set (0.00 sec)
--actor表索引
robin@localhost[sakila]> show index from actor\G
*************************** 1. row ***************************
? ? ? ? Table: actor
? Non_unique: 0
? ? Key_name: PRIMARY
?Seq_in_index: 1
? Column_name: actor_id
? ? Collation: A
? Cardinality: 200
? ? Sub_part: NULL
? ? ? Packed: NULL
? ? ? ? Null:
? Index_type: BTREE
? ? ? Comment:
Index_comment:
*************************** 2. row ***************************
? ? ? ? Table: actor
? Non_unique: 1
? ? Key_name: idx_actor_last_name
?Seq_in_index: 1
? Column_name: last_name
? ? Collation: A
? Cardinality: 200
? ? Sub_part: NULL
? ? ? Packed: NULL
? ? ? ? Null:
? Index_type: BTREE
? ? ? Comment:
Index_comment:
2 rows in set (0.00 sec)
--actor表结构
robin@localhost[sakila]> desc actor;
+-------------+----------------------+------+-----+-------------------+-----------------------------+
| Field? ? ? | Type? ? ? ? ? ? ? ? | Null | Key | Default? ? ? ? ? | Extra? ? ? ? ? ? ? ? ? ? ? |
+-------------+----------------------+------+-----+-------------------+-----------------------------+
| actor_id? ? | smallint(5) unsigned | NO? | PRI | NULL? ? ? ? ? ? ? | auto_increment? ? ? ? ? ? ? |
| first_name? | varchar(45)? ? ? ? ? | NO? |? ? | NULL? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| last_name? | varchar(45)? ? ? ? ? | NO? | MUL | NULL? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| last_update | timestamp? ? ? ? ? ? | NO? |? ? | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+----------------------+------+-----+-------------------+-----------------------------+
4 rows in set (0.00 sec)
2、使用create table as方式克隆表
robin@localhost[sakila]> create table actor_as as select * from actor;
Query OK, 200 rows affected (0.06 sec)
Records: 200? Duplicates: 0? Warnings: 0
robin@localhost[sakila]> desc actor_as;
+-------------+----------------------+------+-----+-------------------+-----------------------------+
| Field? ? ? | Type? ? ? ? ? ? ? ? | Null | Key | Default? ? ? ? ? | Extra? ? ? ? ? ? ? ? ? ? ? |
+-------------+----------------------+------+-----+-------------------+-----------------------------+
| actor_id? ? | smallint(5) unsigned | NO? |? ? | 0? ? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| first_name? | varchar(45)? ? ? ? ? | NO? |? ? | NULL? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| last_name? | varchar(45)? ? ? ? ? | NO? |? ? | NULL? ? ? ? ? ? ? |? ? ? ? ? ? ? ? ? ? ? ? ? ? |
| last_update | timestamp? ? ? ? ? ? | NO? |? ? | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+----------------------+------+-----+-------------------+-----------------------------+
--从上面的结果可以看出新表缺少了key信息,以及自增列属性 auto_increment
robin@localhost[sakila]> show table status like 'actor_as'\G
*************************** 1. row ***************************
? ? ? ? ? Name: actor_as
? ? ? ? Engine: InnoDB
? ? ? ? Version: 10
? ? Row_format: Compact
? ? ? ? ? Rows: 200
?Avg_row_length: 81
? ? Data_length: 16384
Max_