表是 MySQL 里数据存储的基本单位,建表、调结构、删表几乎天天碰。下面整理一下我常用的操作,附带几个不太容易注意到的细节。

创建表
建表语法非常直白,指定列名、类型,后面跟上字符集和存储引擎就行:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
...
) CHARACTER SET charset COLLATE collation ENGINE engine;
如果不写 CHARACTER SET 或 COLLATE,就会继承所在库的设置。ENGINE 如果不写,MySQL 5.5 以后默认是 InnoDB。
一个带注释的用户表
实际写表,我一般会给字段加上 COMMENT,免得后面自己都忘了什么意思:
CREATE TABLE users (
id INT,
name VARCHAR(20) COMMENT '用户名',
password CHAR(32) COMMENT '密码,md5 固定 32 位',
birthday DATE COMMENT '生日'
) CHARACTER SET utf8 ENGINE MyISAM;
这里特意用了 MyISAM 引擎,方便说明不同引擎产生的物理文件。建完表后,到数据目录里能看见 users.frm(表结构)、users.MYD(数据)和 users.MYI(索引)三个文件。如果是 InnoDB,就只会看见 users.frm 和 users.ibd,数据和索引都塞在 .ibd 里。
生产环境基本都用 InnoDB:支持事务、行级锁,崩溃恢复能力也强。MyISAM 偶尔在读写分离的静态报表场景里还能见着,但不再推荐。
建表之前别忘了 USE database_name;,否则会提示没选库。
查看表结构
要看表有哪些字段、类型、能不能为空,用 DESC 表名 就够了:
DESC users;
返回的表格里,Field、Type、Null、Key、Default、Extra 这些列会告诉你表是怎么设计的。我最常用这个命令,查看字段类型和注释很方便。
修改表
业务调整免不了改表结构。ALTER TABLE 能做几乎所有事。先给 users 表塞两条数据,方便演示:


