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号','人事部');
命令如下:
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表的数据。