MySQL利用现有的数据表创建新表

MySQL利用现有的数据表创建新表

MySQL使用create table可以创建数据表,该命令通过为表指定字段并设置字段的数据类型,也可以设置主键、外键、unique约束、索引、默认值、自增等特性。

使用create table命令除了可以通过定义字段名创建一张新表,还可以在已有表的基础上创建新表。比如已经创建了emp(员工)表,并输入了数据。

create table emp(
    emp_id int primary key auto_increment comment '员工号',
    emp_name char(20) not null default '' comment '员工姓名',
    gender char(2) not null default '男' comment '性别',
    birth datetime not null default '1990-1-1' comment '出生日期',
    salary decimal(10,2) not null default 0 comment '工资',
    address varchar(200) not null default '' comment '通讯地址',
    dept_name char(20) comment '部门'
);

insert into emp(emp_name,gender,birth,salary,address,dept_name) 
values('张晓红','女','1980-1-23',5800,'河南省郑州市中原路10号','销售部'),
('张静静','女','1987-10-3',5400,'河南省新乡市平原路38号','销售部'),
('王云飞','男','1992-11-15',5600,'河南省新乡市人民路28号','销售部'),
('王鹏飞','男','1987-10-1',6800,'河南省新乡市东明大道12号','销售部'),
('王大鹏','男','1989-2-11',5900,'河南省郑州市东风路15号','生产制造部'),
('王萌萌','女','1986-12-30',5000,'河南省开封市五一路14号','生产制造部'),
('王大光','男','1988-11-8',6200,'河南省开封市八一路124号','生产制造部'),
('王小明','男','1998-1-3',4800,'河南省驻马店市雪松路128号','生产制造部'),
('王娜娜','女','1994-3-5',5200,'河南省驻马店市车站路2号','生产制造部'),
('刘云飞','男','1992-8-13',6800,'河南省南阳市民生路255号','人事部'),
('张陆军','男','1991-9-6',6200,'河南省南阳市张仲景路14号','人事部');

一、根据emp表结构创建新表

命令如下:

create table new_tablename like old_tablename;

create table employee like emp;

查看结果:

mysql> select * from employee;
Empty set (0.00 sec)

mysql> desc emp;
+-----------+---------------+------+-----+---------------------+----------------+
| Field     | Type          | Null | Key | Default             | Extra          |
+-----------+---------------+------+-----+---------------------+----------------+
| emp_id    | int(11)       | NO   | PRI | NULL                | auto_increment |
| emp_name  | char(20)      | NO   |     |                     |                |
| gender    | char(2)       | NO   |     | 男                  |                |
| birth     | datetime      | NO   |     | 1990-01-01 00:00:00 |                |
| salary    | decimal(10,2) | NO   |     | 0.00                |                |
| address   | varchar(200)  | NO   |     |                     |                |
| dept_name | char(20)      | YES  |     | NULL                |                |
+-----------+---------------+------+-----+---------------------+----------------+
7 rows in set (0.00 sec)

mysql> desc employee;
+-----------+---------------+------+-----+---------------------+----------------+
| Field     | Type          | Null | Key | Default             | Extra          |
+-----------+---------------+------+-----+---------------------+----------------+
| emp_id    | int(11)       | NO   | PRI | NULL                | auto_increment |
| emp_name  | char(20)      | NO   |     |                     |                |
| gender    | char(2)       | NO   |     | 男                  |                |
| birth     | datetime      | NO   |     | 1990-01-01 00:00:00 |                |
| salary    | decimal(10,2) | NO   |     | 0.00                |                |
| address   | varchar(200)  | NO   |     |                     |                |
| dept_name | char(20)      | YES  |     | NULL                |                |
+-----------+---------------+------+-----+---------------------+----------------+
7 rows in set (0.00 sec)

利用select命令可以看到,employee表为空表;利用desc命令可以看到,employee表结构和emp表完全相同。

二、根据另一个表的查询结果创建新表

命令如下:

create table table_name select statement;

举例:

mysql> create table emp1 select emp_id,emp_name,salary,address from emp;
Query OK, 11 rows affected (0.02 sec)
Records: 11  Duplicates: 0  Warnings: 0

mysql> desc emp1;
+----------+---------------+------+-----+---------+-------+
| Field    | Type          | Null | Key | Default | Extra |
+----------+---------------+------+-----+---------+-------+
| emp_id   | int(11)       | NO   |     | 0       |       |
| emp_name | char(20)      | NO   |     |         |       |
| salary   | decimal(10,2) | NO   |     | 0.00    |       |
| address  | varchar(200)  | NO   |     |         |       |
+----------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

mysql> select * from emp1;
+--------+-----------+---------+--------------------------------------+
| emp_id | emp_name  | salary  | address                              |
+--------+-----------+---------+--------------------------------------+
|      1 | 张晓红    | 5800.00 | 河南省郑州市中原路10号               |
|      2 | 张静静    | 5400.00 | 河南省新乡市平原路38号               |
|      3 | 王云飞    | 5600.00 | 河南省新乡市人民路28号               |
|      4 | 王鹏飞    | 6800.00 | 河南省新乡市东明大道12号             |
|      5 | 王大鹏    | 5900.00 | 河南省郑州市东风路15号               |
|      6 | 王萌萌    | 5000.00 | 河南省开封市五一路14号               |
|      7 | 王大光    | 6200.00 | 河南省开封市八一路124号              |
|      8 | 王小明    | 4800.00 | 河南省驻马店市雪松路128号            |
|      9 | 王娜娜    | 5200.00 | 河南省驻马店市车站路2号              |
|     10 | 刘云飞    | 6800.00 | 河南省南阳市民生路255号              |
|     11 | 张陆军    | 6200.00 | 河南省南阳市张仲景路14号             |
+--------+-----------+---------+--------------------------------------+
11 rows in set (0.00 sec)

利用select命令可以看到,emp1表包含了emp表的数据。

发布了44 篇原创文章 · 获赞 48 · 访问量 5401

猜你喜欢

转载自blog.csdn.net/weixin_44377973/article/details/103257227
今日推荐