复制表的列结构及记录

  1. 仅复制表的列结构

    1. 仅复制表的列结构格式:

      create table 新表名 like 原表名;

      表 student 有下面的记录:
      +----+------+----------+
      | id | name | nickname |
      +----+------+----------+
      |  1 | 王军 | 兵哥哥   |
      |  2 | 张美 | 美妹     |
      |  3 | 陈思 | 小思     |
      +----+------+----------+
      上面的表, 可以用下面的命令,建立:

      create table student ( id int primary key auto_increment, name varchar(10), nickname varchar(10) );

      insert into student ( name, nickname) values ("王军", "兵哥哥");

      insert into student ( name, nickname) values ("张美", "美妹");

      insert into student ( name, nickname) values ("陈思", "小思");

      下面的命令创建新表 disciple, 此表的列结构和表 student 相同:

      create table disciple like student;

      
        mysql> create table disciple like student;
        Query OK, 0 rows affected (3.548 sec)
        mysql>
      
            
      可以看到表 disciple 的列结构和 student 相同:
      
        mysql> desc disciple;
      +----------+-------------+------+-----+---------+----------------+
      | Field    | Type        | Null | Key | Default | Extra          |
      +----------+-------------+------+-----+---------+----------------+
      | id       | int         | NO   | PRI | NULL    | auto_increment |
      | name     | varchar(10) | YES  |     | NULL    |                |
      | nickname | varchar(10) | YES  |     | NULL    |                |
      +----------+-------------+------+-----+---------+----------------+
      3 rows in set (1.565 sec)
      
      mysql>
      
            
  2. 复制表的列结构及记录

    1. 复制表的列结构及符合条件的记录格式:

      create table 新表名 select * from 原表 where 条件;

      下面的命令创建新表 pupil, 此表的列结构和表 student 不完全相同, 并且复制了 name 为张美的这条记录:

      create table pupil select * from student where name="张美";

      
        mysql> create table pupil select * from student where name="张美";
        Query OK, 1 row affected (2.258 sec)
        Records: 1  Duplicates: 0  Warnings: 0
      
        mysql>
      
            
      可以看到表 pupil 的列结构和 student 不完全相同,主键和自动连续编号的列设置没有复制:
      
      mysql> desc pupil;
      +----------+-------------+------+-----+---------+-------+
      | Field    | Type        | Null | Key | Default | Extra |
      +----------+-------------+------+-----+---------+-------+
      | id       | int         | NO   |     | 0       |       |
      | name     | varchar(10) | YES  |     | NULL    |       |
      | nickname | varchar(10) | YES  |     | NULL    |       |
      +----------+-------------+------+-----+---------+-------+
      3 rows in set (0.024 sec)
      
      mysql>
            
      可以看到表 student 的 name 为张美的这条记录成功被复制到表 pupil 中:
      mysql> select * from pupil;
      +----+------+----------+
      | id | name | nickname |
      +----+------+----------+
      |  2 | 张美 | 美妹     |
      +----+------+----------+
      1 row in set (0.112 sec)
      
      mysql>