目录
- [1. 创建表](#1. 创建表)
- [2. 创建表案例](#2. 创建表案例)
- [3. 查看表结构](#3. 查看表结构)
- [4. 修改表](#4. 修改表)
-
- [4.1 添加字段(保存图片路径)](#4.1 添加字段(保存图片路径))
- [4.2 修改字段(调整 name 字段长度为 60)](#4.2 修改字段(调整 name 字段长度为 60))
- [4.3 删除字段(删除 password 字段)](#4.3 删除字段(删除 password 字段))
- [4.4 修改表名(users 改为 employee)](#4.4 修改表名(users 改为 employee))
- [4.5 修改字段名(name 改为 xingming)](#4.5 修改字段名(name 改为 xingming))
- [5. 删除表](#5. 删除表)
1. 创建表
语法
sql
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
说明
field表示列名datatype表示列的类型character set字符集:如果没有指定字符集,则以所在数据库的字符集为准collate校验规则:如果没有指定校验规则,则以所在数据库的校验规则为准
2. 创建表案例
- 新建数据库
user_db,并使用
sql
create database user_db;
use user_db;
- 建表示例
sql
create table user1(
id int,
name varchar(20) comment '用户名',
password char(32) comment '用户的密码',
birthday date comment '用户的生日'
)engine MyISAM;
create table user2(
id int,
name varchar(20) comment '用户名',
password char(32) comment '用户的密码',
birthday date comment '用户的生日'
)engine=InnoDB;
说明
不同的存储引擎,创建表的文件不一样。
user1 表(MyISAM 引擎):数据库目录下生成 3 个文件:
user1.MYD:存储表的实际数据;user1.MYI:存储表的索引信息;user1.sdi:序列化字典信息,替代旧版本.frm文件存储表结构。
user2 表(InnoDB 引擎,默认配置):数据库目录下仅生成 user2.ibd 文件,存储表的所有数据、索引,表结构信息统一存入 InnoDB 数据字典(无 .frm/.sdi 独立文件);若关闭 innodb_file_per_table,则无独立文件,数据 / 索引存入共享表空间 ibdata1。
存储文件示例路径
bash
-rw-r----- 1 mysql mysql 3996 2月 23 17:03 user1_702.sdi
-rw-r----- 1 mysql mysql 0 2月 23 17:03 user1.MYD
-rw-r----- 1 mysql mysql 1024 2月 23 17:03 user1.MYI
-rw-r----- 1 mysql mysql 114688 2月 23 17:05 user2.ibd
3. 查看表结构
- 查看数据库中的表目录
sql
show tables;
- 查看某一个表的表结构
sql
desc 表名;
# 示例
desc user1;

字段解读:
- Field:字段名字
- Type:字段类型
- Null:是否允许为空
- Key:索引类型
- Default:默认值
- Extra:扩充属性
- 查看创建表时的详细信息
sql
show create table user1;
# 补:把分号换成\G可以将不想需要的符号去掉
show create table user1 \G


4. 修改表
在项目实际开发中,经常需要修改表的结构,比如字段名字、字段大小、字段类型、表的字符集类型、表的存储引擎等;也会有添加字段、删除字段、修改表名、修改字段名等需求,此时需要通过 ALTER TABLE 语句修改表。
核心语法
sql
-- 添加字段
ALTER TABLE tablename ADD (column datatype [DEFAULT expr][, column datatype]...);
-- 修改字段(类型/长度/默认值等)
ALTER TABLE tablename MODIFY (column datatype [DEFAULT expr][, column datatype]...);
-- 删除字段
ALTER TABLE tablename DROP (column);
-- 修改表名
ALTER TABLE tablename RENAME TO 新表名;
-- 修改字段名
ALTER TABLE tablename CHANGE 旧字段名 新字段名 字段类型;
操作案例
插入测试数据
sql
mysql> insert into user1 values(1, 'a', 'b', '1982-01-04'), (2, 'b', 'c', '1984-01-04');
4.1 添加字段(保存图片路径)
sql
mysql> alter table user1 add assets varchar(100) comment '用户头像路径' after birthday;
查看修改后表结构:
sql
mysql> desc user1;
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| id | int(11) | YES | NULL | ||
| name | varchar(20) | YES | NULL | ||
| password | char(32) | YES | NULL | ||
| birthday | date | YES | NULL | ||
| assets | varchar(100) | YES | NULL |
查看数据(新增字段默认值为 NULL):
sql
mysql> select * from users;
| id | name | password | birthday | assets |
|---|---|---|---|---|
| 1 | a | b | 1982-01-04 | NULL |
| 2 | b | c | 1984-01-04 | NULL |
4.2 修改字段(调整 name 字段长度为 60)
sql
mysql> alter table user1 modify name varchar(60);
覆盖式修改,整个name字段被新的配置覆盖。
查看修改后表结构:

4.3 删除字段(删除 password 字段)
sql
mysql> alter table users drop password;
注意 :删除字段会永久删除该字段及其对应的所有数据,操作需谨慎。
查看删除后表结构:
sql
mysql> desc users;
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| id | int(11) | YES | NULL | ||
| name | varchar(60) | YES | NULL | ||
| birthday | date | YES | NULL | ||
| assets | varchar(100) | YES | NULL |
4.4 修改表名(users 改为 employee)
sql
mysql> alter table user1 rename to users;
# "to"可以省略
验证表名修改:
sql
mysql> select * from users;
| id | name | birthday | assets |
|---|---|---|---|
| 1 | a | 1982-01-04 | NULL |
| 2 | b | 1984-01-04 | NULL |
4.5 修改字段名(name 改为 xingming)
sql
mysql> alter table users change name xingming varchar(60);
修改字段名的同时也要重新设置字段属性
查看修改后表结构:
sql
mysql> desc users;
| Field | Type | Null | Key | Default | Extra |
|---|---|---|---|---|---|
| id | int(11) | YES | NULL | ||
| xingming | varchar(60) | YES | NULL | ||
| birthday | date | YES | NULL | ||
| assets | varchar(100) | YES | NULL |
5. 删除表
语法
sql
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...;
示例
sql
drop table user2;
结论:
- 不要轻易修改表和删除表!