[mysql基础文档]-14-如何克隆表结构

引言

有时我们需要建立一张和已存在的表结构相同的表,但又不想重新输入建表命令,这个时候就可以用到表结构克隆命令,本文介绍两种MySQL中最常用的表结构克隆方法。

文章目录

0×1.MySQL如何克隆表数据

● 表结构克隆有create table as和create table like两种方法;

● 两者区别:

create table like 将表结构与索引完全克隆,但不克隆表数据;
create table as 仅复制表结构但不复制表索引(比如主键索引和自增长属性等),但能克隆表数据;

● 注意:

create table like是MySQL独有,oracle仅支持create table as,不支持create table like;

● 表结构克隆实例:

                    
                    --这是上一篇文章实例中创建的t18
                    mysql> select * from t18;
                    +----+---------------+
                    | id | uname         |
                    +----+---------------+
                    |  1 | hk987.xyz |
                    |  2 | hk987.xyz |
                    |  3 | hk987.xyz |
                    |  4 | hk987.xyz |
                    |  6 | hk987.xyz |
                    |  7 | hk987.xyz |
                    +----+---------------+

                    --t18表结构如下,id是主键索引,并有自增长属性
                    mysql> desc t18;
                    +-------+----------+------+-----+---------+----------------+
                    | Field | Type     | Null | Key | Default | Extra          |
                    +-------+----------+------+-----+---------+----------------+
                    | id    | int(11)  | NO   | PRI | NULL    | auto_increment |
                    | uname | char(20) | YES  |     | NULL    |                |
                    +-------+----------+------+-----+---------+----------------+

                    --使用as命令,将t18表结构与数据克隆到t18as表,t18as不能是已存在的表,否则会报错
                    mysql> create table t18as as select * from t18;

                    --从select可以看到,t18表数据被克隆到了t18as表中
                    mysql> select * from t18as;
                    +----+---------------+
                    | id | uname         |
                    +----+---------------+
                    |  1 | hk987.xyz |
                    |  2 | hk987.xyz |
                    |  3 | hk987.xyz |
                    |  4 | hk987.xyz |
                    |  6 | hk987.xyz |
                    |  7 | hk987.xyz |
                    +----+---------------+

                    --desc显示,t18的主键索引以及自增长属性并没有被克隆过来
                    mysql> desc t18as;
                    +-------+----------+------+-----+---------+-------+
                    | Field | Type     | Null | Key | Default | Extra |
                    +-------+----------+------+-----+---------+-------+
                    | id    | int(11)  | NO   |     | 0       |       |
                    | uname | char(20) | YES  |     | NULL    |       |
                    +-------+----------+------+-----+---------+-------+

                    --如果我们仅想通过as命令克隆表结构,不克隆表数据,可以使用limit筛选(limit在后面的文章中会详细介绍,这里只要知道,这个筛选命令将表数据全部排除在要被克隆的数据之外就可以了,也就是仅克隆表结构,不克隆表数据)
                    mysql> create table t18ast as select * from t18 limit 0;

                    --like命令克隆表结构
                    mysql> create table t18like like t18;

                    --like命令不会克隆表数据
                    mysql> select * from t18like;
                    Empty set (0.00 sec)

                    --表结构与原表t18完全一致,包括索引值和自增长
                    mysql> desc t18like;
                    +-------+----------+------+-----+---------+----------------+
                    | Field | Type     | Null | Key | Default | Extra          |
                    +-------+----------+------+-----+---------+----------------+
                    | id    | int(11)  | NO   | PRI | NULL    | auto_increment |
                    | uname | char(20) | YES  |     | NULL    |                |
                    +-------+----------+------+-----+---------+----------------+