显示所有的表
show tables
创建表
create table [if not exists] 表名 (
字段名 数据类型 [null|not null][auto_increment][primary key][comment],
字段名 数据类型 [default]...
)engine=存储引擎
单词
null | not null 空|非空
default 默认值
auto_increment 自动增长
primary key 主键
comment 备注
engine 引擎 innodb myisam memory 引擎是决定数据存储的方式
创建简单的表
mysql> create database itcast;
Query OK, 1 row affected (0.00 sec)
mysql> use itcast;
Database changed
mysql> show tables;
Empty set (0.05 sec)
# 创建表
mysql> create table stu(
-> id int,
-> name varchar(30)
-> );
Query OK, 0 rows affected (0.13 sec)
# 查看创建的表
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| stu |
+------------------+
创建复杂的表
mysql> set names gbk; # 设置字符编码
Query OK, 0 rows affected (0.05 sec)
mysql> create table if not exists teacher(
-> id int auto_increment primary key comment '主键',
-> name varchar(20) not null comment '姓名',
-> phone varchar(20) comment '电话号码',
-> `add` varchar(100) default '地址不详' comment '地址'
-> )engine=innodb;
Query OK, 0 rows affected (0.09 sec)
create table 数据库名.表名,用于给指定的数据库创建表
mysql> create table data.stu( #给data数据库中创建stu表
-> id int,
-> name varchar(10));
Query OK, 0 rows affected (0.00 sec)
显示创建表的语句
语法:
show create table 表名
显示创建teacher表的语句
mysql> show create table teacher;
+---------+--------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------+
| Table | Create Table
|
+---------+--------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
-------+
| teacher | CREATE TABLE `teacher` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`name` varchar(20) NOT NULL COMMENT '姓名',
`phone` varchar(20) DEFAULT NULL COMMENT '电话号码',
`add` varchar(100) DEFAULT '地址不详' COMMENT '地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
查看表结构
语法:
desc[ribe] 表名
查看teacher表结构
mysql> describe teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+----------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| add | varchar(100) | YES | | 地址不详 | |
+-------+--------------+------+-----+----------+----------------+
4 rows in set (0.08 sec)
mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+----------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| add | varchar(100) | YES | | 地址不详 | |
+-------+--------------+------+-----+----------+----------------+
4 rows in set (0.01 sec)
删除表
语法:
drop table [if exists] 表1,表2,…
删除表
mysql> drop table stu;
Query OK, 0 rows affected (0.08 sec)
修改表
alter table 表名
添加字段:alter table 表名add[column] 字段名 数据类型 [位置]
添加字段
mysql> alter table teacher add age int;
Query OK, 0 rows affected (0.09 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+----------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| add | varchar(100) | YES | | 地址不详 | |
| age | int(11) | YES | | NULL | |
+-------+--------------+------+-----+----------+----------------+
5 rows in set (0.00 sec)
在第一个位置上添加字段
mysql> alter table teacher add email varchar(30) first;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+----------+----------------+
| email | varchar(30) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| add | varchar(100) | YES | | 地址不详 | |
| age | int(11) | YES | | NULL | |
+-------+--------------+------+-----+----------+----------------+
在指定的字段后添加字段
mysql> alter table teacher add sex varchar(2) after name;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> desc teacher;
+-------+--------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+----------+----------------+
| email | varchar(30) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| sex | varchar(2) | YES | | NULL | |
| phone | varchar(20) | YES | | NULL | |
| add | varchar(100) | YES | | 地址不详 | |
| age | int(11) | YES | | NULL | |
+-------+--------------+------+-----+----------+----------------+
7 rows in set (0.00 sec)
删除字段:alter table 表 drop [column] 字段名
mysql> alter table teacher drop email;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改字段(改名改类型):alter table 表 change [column] 原字段名 新字段名 数据类型…
将字段sex改为xingbie,数据类型为int
mysql> alter table teacher change sex xingbie int;
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改字段(不改名):alter table 表 modify 字段名 字段属性 …
将性别的数据类型改为varchar(2)
mysql> alter table teacher modify xingbie varchar(2);
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改引擎:alter table 表名 engine=引擎名
mysql> alter table teacher engine=myisam;
Query OK, 0 rows affected (0.05 sec)
Records: 0 Duplicates: 0 Warnings: 0
修改表名:alter table 表名 rename to 新表名
mysql> alter table teacher rename to stu;
Query OK, 0 rows affected (0.00 sec)
mysql> show tables;
+------------------+
| Tables_in_itcast |
+------------------+
| stu |
+------------------+
1 row in set (0.00 sec)
复制表
语法一: create table 新表 select 字段 from 旧表
特点:不能复制父表的主键,能够复制父表的数据
mysql> create table stu1 select * from stu;
Query OK, 1 row affected (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 0
mysql> select * from stu1; # 查看数据复制到新表中
+----+------+------+-------+
| id | name | addr | score |
+----+------+------+-------+
| 1 | rose | 上海 | 88 |
+----+------+------+-------+
1 row in set (0.00 sec)
mysql> desc stu1; # 主键没有复制
+-------+-------------+------+-----+----------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+----------+-------+
| id | int(11) | NO | | 0 | |
| name | varchar(20) | NO | | NULL | |
| addr | varchar(50) | YES | | 地址不详 | |
| score | int(11) | YES | | NULL | |
+-------+-------------+------+-----+----------+-------+
4 rows in set (0.00 sec)
语法二: create table 新表 like 旧表
特点: 只能复制表结构,不能复制表数据
Query OK, 0 rows affected (0.00 sec)
mysql> select * from stu2; # 数据没有复制
Empty set (0.01 sec)
mysql> desc stu2; # 主键复制了
+-------+-------------+------+-----+----------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+----------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| addr | varchar(50) | YES | | 地址不详 | |
| score | int(11) | YES | | NULL | |
+-------+-------------+------+-----+----------+----------------+
4 rows in set (0.00 sec)