1. 知识结构
bash
MySQL
└── SQL(结构化查询语言)
├── DDL(数据定义语言) → 定义结构
│ ├── 表操作(创建/修改/删除表)
│ └── 数据类型(列字段类型定义)
├── DML(数据操作语言) → 增删改数据
├── DQL(数据查询语言) → 查询数据
└── DCL(数据控制语言) → 权限、事务控制
2. DDL 表操作
操作 | 语法 | 示例 |
---|---|---|
创建表 | CREATE TABLE 表名 (列名 数据类型 约束, ...) |
CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(50)); |
如果不存在再创建 | CREATE TABLE IF NOT EXISTS 表名 (...) |
CREATE TABLE IF NOT EXISTS users (...); |
查看表结构 | DESC 表名; 或 SHOW COLUMNS FROM 表名; |
DESC users; |
修改表名 | RENAME TABLE 旧名 TO 新名; |
RENAME TABLE users TO members; |
添加列 | ALTER TABLE 表名 ADD 列名 数据类型 约束; |
ALTER TABLE users ADD email VARCHAR(100); |
修改列数据类型 | ALTER TABLE 表名 MODIFY 列名 新数据类型; |
ALTER TABLE users MODIFY name VARCHAR(100); |
重命名列 | ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型; |
ALTER TABLE users CHANGE name username VARCHAR(50); |
删除列 | ALTER TABLE 表名 DROP 列名; |
ALTER TABLE users DROP email; |
删除表 | DROP TABLE 表名; |
DROP TABLE users; |
如果存在再删除 | DROP TABLE IF EXISTS 表名; |
DROP TABLE IF EXISTS users; |
清空表数据 | TRUNCATE TABLE 表名; |
TRUNCATE TABLE users; |
3. MySQL 常用数据类型
3.1 数值类型
类型 | 大小 | 有符号范围 (SIGNED) | 无符号范围 (UNSIGNED) | 用途 |
---|---|---|---|---|
TINYINT |
1字节 | -128 ~ 127 | 0 ~ 255 | 状态、布尔值(0/1) |
SMALLINT |
2字节 | -32768 ~ 32767 | 0 ~ 65535 | 小范围整数 |
MEDIUMINT |
3字节 | -8388608 ~ 8388607 | 0 ~ 16777215 | 中等范围整数 |
INT / INTEGER |
4字节 | -21亿 ~ 21亿 | 0 ~ 42亿 | 常用整型 |
BIGINT |
8字节 | ±9.22e18 | 0 ~ 1.84e19 | 超大整数 |
DECIMAL(M,D) |
按精度 | 精确小数 | 精确小数 | 金额计算 |
FLOAT |
4字节 | 非精确小数 | 非精确小数 | 科学计算 |
DOUBLE |
8字节 | 非精确小数 | 非精确小数 | 高精度浮点 |
3.2 字符串类型
类型 | 最大长度 | 用途 |
---|---|---|
CHAR(M) |
固定长度,0~255 | 性别、状态码 |
VARCHAR(M) |
可变长度,0~65535(取决于行大小) | 姓名、标题 |
TEXT |
65535字符 | 文章内容 |
TINYTEXT |
255字符 | 短文本 |
MEDIUMTEXT |
16777215字符 | 中长文本 |
LONGTEXT |
4GB | 大段文本 |
BLOB 系列 |
同 TEXT,但存二进制 | 图片、文件 |
3.3 日期与时间类型
类型 | 格式 | 范围 | 用途 |
---|---|---|---|
DATE |
YYYY-MM-DD | 1000-01-01 ~ 9999-12-31 | 出生日期、节日 |
TIME |
HH:MM:SS | -838:59:59 ~ 838:59:59 | 事件时间 |
DATETIME |
YYYY-MM-DD HH:MM:SS | 1000-01-01 ~ 9999-12-31 | 日志时间 |
TIMESTAMP |
YYYY-MM-DD HH:MM:SS | 1970-01-01 ~ 2038-01-19 | 自动更新当前时间 |
YEAR |
YYYY | 1901 ~ 2155 | 年份 |
4. 注意事项
-
表名、列名建议全小写 ,关键字大写,提高可读性:
sqlCREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL );
-
CHAR
固定长度,不足补空格;VARCHAR
可变长度,更节省空间。 -
金额一定用
DECIMAL
而不是FLOAT
/DOUBLE
,避免精度丢失。 -
TIMESTAMP
会受时区影响,DATETIME
不受时区影响。 -
大型文本字段(TEXT/BLOB)会单独存储,不适合频繁搜索。