数据库字段类型与关键字速查表(自用)

29 阅读11分钟

目录


MySQL 数据类型

数值类型

类型字节取值范围推荐使用场景
TINYINT1-128127 (有符号)
0
255 (无符号)
年龄、状态码、小范围枚举
SMALLINT2-3276832767 (有符号)
0
65535 (无符号)
年份、数量统计
MEDIUMINT3-83886088388607 (有符号)
0
16777215 (无符号)
中等规模自增ID
INT / INTEGER4-21474836482147483647 (有符号)
0
4294967295 (无符号)
常规自增ID、数量、价格(分)
BIGINT8±9.22×10^18大数据量ID、金额(分)、时间戳
FLOAT4单精度浮点不推荐用于精确计算
DOUBLE8双精度浮点科学计算、统计数据
DECIMAL(M,D)变长精确小数金额、百分比(推荐)

字符串类型

类型最大长度存储方式推荐使用场景
CHAR(M)255 字符定长,空格填充固定长度:MD5、UUID、状态码
VARCHAR(M)65535 字节变长,前缀长度姓名、标题、地址、URL
TINYTEXT255 字节变长短文本、备注
TEXT65535 字节 (64KB)变长文章摘要、描述
MEDIUMTEXT16777215 字节 (16MB)变长长文章、详情
LONGTEXT4294967295 字节 (4GB)变长超长内容、日志
ENUM65535 个值整数存储性别、状态等固定选项
SET64 个成员位图存储多选标签、权限组合

日期时间类型

类型范围格式推荐使用场景
DATE1000-01-01 ~ 9999-12-31YYYY-MM-DD生日、纪念日
TIME-838:59:59 ~ 838:59:59HH:MM:SS营业时间、时长
YEAR1901 ~ 2155YYYY年份统计
DATETIME1000-01-01 00:00:00 ~ 9999-12-31 23:59:59YYYY-MM-DD HH:MM:SS创建时间、更新时间
TIMESTAMP1970-01-01 00:00:01 ~ 2038-01-19 03:14:07YYYY-MM-DD HH:MM:SS自动更新的时间戳

二进制类型

类型最大长度推荐使用场景
BINARY(M)255 字节固定长度二进制哈希值
VARBINARY(M)65535 字节变长二进制数据、加密数据
TINYBLOB255 字节小图标、缩略图
BLOB65535 字节小文件、图片
MEDIUMBLOB16MB中等文件
LONGBLOB4GB大文件(不推荐存数据库)

特殊类型

类型说明推荐使用场景
JSON5.7+ 支持存储 JSON 格式数据、配置、动态字段
GEOMETRY空间数据地理位置、坐标
POINT点坐标经纬度

PostgreSQL 数据类型

数值类型

类型字节取值范围推荐使用场景
SMALLINT2-32768~32767小范围整数
INTEGER4-2147483648~2147483647常规整数、ID
BIGINT8±9.22×10^18大数值、时间戳
SERIAL4自增整数自增主键
BIGSERIAL8自增大整数大表自增主键
REAL4单精度浮点计算
DOUBLE PRECISION8双精度高精度浮点
NUMERIC(P,S)变长任意精度金额、精确计算
MONEY8货币货币金额(不推荐)

字符串类型

类型最大长度说明推荐使用场景
CHAR(N)1GB定长,空格填充固定长度字符串
VARCHAR(N)1GB变长通用字符串(推荐)
TEXT1GB变长,无长度限制长文本、文章内容
CITEXT1GB不区分大小写的文本邮箱、用户名

日期时间类型

类型范围精度推荐使用场景
DATE4713 BC ~ 5874897 AD日期
TIME00:00:00 ~ 24:00:00微秒时间
TIMESTAMP4713 BC ~ 294276 AD微秒时间戳(无时区)
TIMESTAMPTZ4713 BC ~ 294276 AD微秒时间戳(带时区)(推荐)
INTERVAL-178000000 年 ~ 178000000 年微秒时间间隔

布尔类型

类型推荐使用场景
BOOLEANTRUE / FALSE / NULL开关、标志位

特殊类型

类型说明推荐使用场景
UUID128位唯一标识符分布式系统ID
JSONJSON 数据JSON 存储(性能较低)
JSONB二进制 JSON推荐的 JSON 存储
ARRAY数组类型标签列表、多值字段
HSTORE键值对动态属性、配置
INETIP 地址IPv4/IPv6 地址
CIDR网络地址网段
MACADDRMAC 地址硬件地址
XMLXML 数据XML 文档存储

几何类型

类型说明推荐使用场景
POINT坐标
LINE线路径
POLYGON多边形区域范围
GEOMETRYPostGIS 扩展地理信息系统

SQL Server 数据类型

数值类型

类型字节取值范围推荐使用场景
BIT1 bit0 或 1布尔值、标志位
TINYINT10~255小整数
SMALLINT2-32768~32767中等整数
INT4±21亿常规整数
BIGINT8±922亿亿大整数
DECIMAL(P,S)5-17精确数值金额(推荐)
NUMERIC(P,S)5-17同 DECIMAL精确数值
MONEY8±922万亿货币(4位小数)
SMALLMONEY4±21万小额货币
FLOAT(N)4/8浮点数科学计算
REAL4单精度浮点浮点计算

字符串类型

类型最大长度编码推荐使用场景
CHAR(N)8000ASCII定长字符串
VARCHAR(N)8000ASCII变长字符串
VARCHAR(MAX)2GBASCII长文本
NCHAR(N)4000Unicode定长国际化字符串
NVARCHAR(N)4000Unicode推荐国际化字符串
NVARCHAR(MAX)2GBUnicode长国际化文本
TEXT2GBASCII长文本(已弃用)
NTEXT2GBUnicodeUnicode长文本(已弃用)

日期时间类型

类型范围精度推荐使用场景
DATE0001-01-01 ~ 9999-12-31日期
TIME00:00:00 ~ 23:59:59.9999999100纳秒时间
DATETIME1753-01-01 ~ 9999-12-313.33毫秒旧版时间戳
DATETIME20001-01-01 ~ 9999-12-31100纳秒推荐时间戳
SMALLDATETIME1900-01-01 ~ 2079-06-061分钟粗略时间
DATETIMEOFFSET0001-01-01 ~ 9999-12-31100纳秒带时区时间戳

二进制类型

类型最大长度推荐使用场景
BINARY(N)8000定长二进制
VARBINARY(N)8000变长二进制
VARBINARY(MAX)2GB大二进制数据
IMAGE2GB图片(已弃用)

特殊类型

类型说明推荐使用场景
UNIQUEIDENTIFIERGUID全局唯一标识符
XMLXML 数据XML 文档
SPATIAL TYPES空间数据地理位置
HIERARCHYID层次结构组织结构树

通用 SQL 关键字

数据定义语言 (DDL)

关键字含义使用场景示例
CREATE创建创建数据库、表、索引、视图等CREATE TABLE users (...)
ALTER修改修改表结构、添加/删除列ALTER TABLE users ADD age INT
DROP删除删除数据库、表、索引等DROP TABLE users
TRUNCATE清空快速清空表数据(不可回滚)TRUNCATE TABLE logs
RENAME重命名重命名表或列RENAME TABLE old TO new

数据操作语言 (DML)

关键字含义使用场景示例
SELECT查询查询数据SELECT * FROM users
INSERT插入插入新数据INSERT INTO users VALUES (...)
UPDATE更新修改已有数据UPDATE users SET age=18
DELETE删除删除数据行DELETE FROM users WHERE id=1
MERGE合并根据条件插入或更新MERGE INTO ... USING ... ON ...

数据查询语言 (DQL)

关键字含义使用场景示例
FROM来源指定查询的表FROM users
WHERE条件过滤行WHERE age > 18
GROUP BY分组按列分组聚合GROUP BY city
HAVING分组条件过滤分组后的结果HAVING COUNT(*) > 10
ORDER BY排序结果排序ORDER BY age DESC
LIMIT限制限制返回行数(MySQL/PostgreSQL)LIMIT 10
OFFSET偏移跳过指定行数OFFSET 20
TOP限制限制返回行数(SQL Server)TOP 10

连接与集合

关键字含义使用场景示例
JOIN连接连接多张表INNER JOIN orders ON ...
INNER JOIN内连接返回匹配的行INNER JOIN
LEFT JOIN左连接返回左表所有行LEFT JOIN orders ON ...
RIGHT JOIN右连接返回右表所有行RIGHT JOIN
FULL JOIN全连接返回两表所有行FULL OUTER JOIN
CROSS JOIN笛卡尔积返回所有组合CROSS JOIN
UNION并集合并结果(去重)SELECT ... UNION SELECT ...
UNION ALL并集合并结果(保留重复)UNION ALL
INTERSECT交集两结果集的交集SELECT ... INTERSECT SELECT ...
EXCEPT差集第一个结果集减去第二个SELECT ... EXCEPT SELECT ...

约束关键字

关键字含义使用场景示例
PRIMARY KEY主键唯一标识每行,不允许NULLid INT PRIMARY KEY
FOREIGN KEY外键引用另一表的主键FOREIGN KEY (user_id) REFERENCES users(id)
UNIQUE唯一列值唯一(允许NULL)email VARCHAR(100) UNIQUE
NOT NULL非空列不允许NULLname VARCHAR(50) NOT NULL
DEFAULT默认值指定默认值status INT DEFAULT 1
CHECK检查自定义约束条件CHECK (age >= 0)
AUTO_INCREMENT自增自动递增(MySQL)id INT AUTO_INCREMENT
SERIAL自增自动递增(PostgreSQL)id SERIAL
IDENTITY自增自动递增(SQL Server)id INT IDENTITY(1,1)

索引关键字

关键字含义使用场景示例
INDEX索引创建普通索引CREATE INDEX idx_name ON users(name)
UNIQUE INDEX唯一索引创建唯一索引CREATE UNIQUE INDEX
FULLTEXT全文索引全文搜索FULLTEXT INDEX idx_content
SPATIAL空间索引地理数据索引SPATIAL INDEX

事务控制 (TCL)

关键字含义使用场景示例
BEGIN开始开始事务BEGIN TRANSACTION
COMMIT提交提交事务COMMIT
ROLLBACK回滚撤销事务ROLLBACK
SAVEPOINT保存点设置事务保存点SAVEPOINT sp1

权限控制 (DCL)

关键字含义使用场景示例
GRANT授权授予用户权限GRANT SELECT ON users TO user1
REVOKE撤销撤销用户权限REVOKE SELECT ON users FROM user1
DENY拒绝明确拒绝权限(SQL Server)DENY DELETE ON users TO user1

聚合函数

关键字含义使用场景示例
COUNT计数统计行数COUNT(*)
SUM求和计算总和SUM(price)
AVG平均计算平均值AVG(age)
MAX最大查找最大值MAX(score)
MIN最小查找最小值MIN(price)
GROUP_CONCAT拼接分组拼接字符串(MySQL)GROUP_CONCAT(name)
STRING_AGG拼接分组拼接字符串(PostgreSQL)STRING_AGG(name, ',')

条件与逻辑

关键字含义使用场景示例
AND多条件同时满足WHERE age > 18 AND status = 1
OR多条件满足其一WHERE city = 'A' OR city = 'B'
NOT条件取反WHERE NOT status = 0
IN包含值在列表中WHERE id IN (1,2,3)
NOT IN不包含值不在列表中WHERE id NOT IN (1,2,3)
BETWEEN区间值在范围内WHERE age BETWEEN 18 AND 30
LIKE模糊字符串模糊匹配WHERE name LIKE '%张%'
IS NULL为空判断NULLWHERE email IS NULL
IS NOT NULL非空判断非NULLWHERE email IS NOT NULL
EXISTS存在子查询有结果WHERE EXISTS (SELECT ...)
CASE条件条件分支CASE WHEN ... THEN ... END
IF条件条件判断(MySQL)IF(status=1, 'active', 'inactive')
COALESCE非空返回第一个非NULL值COALESCE(phone, email, 'N/A')
NULLIF空判断相等时返回NULLNULLIF(col1, col2)

其他常用关键字

关键字含义使用场景示例
AS别名列或表别名SELECT name AS username
DISTINCT去重结果去重SELECT DISTINCT city FROM users
ALL全部保留所有结果(默认)SELECT ALL * FROM users
INTO插入到结果插入新表SELECT * INTO new_table FROM old
VALUES插入的值INSERT INTO users VALUES (...)
SET设置更新时赋值UPDATE users SET age=18
ON条件JOIN条件ON users.id = orders.user_id
USING使用JOIN时使用相同列名JOIN orders USING(user_id)
WITH公用表表达式CTE查询WITH cte AS (...) SELECT ...
RECURSIVE递归递归CTEWITH RECURSIVE ...
EXPLAIN解释查看执行计划EXPLAIN SELECT ...
DESCRIBE / DESC描述查看表结构DESC users
SHOW显示显示数据库信息SHOW TABLES
USE使用切换数据库USE database_name

最佳实践建议

数据类型选择原则

  1. 金额存储:使用 DECIMALNUMERIC,避免使用浮点数
  2. 时间戳:MySQL 使用 DATETIME,PostgreSQL 使用 TIMESTAMPTZ
  3. 布尔值:PostgreSQL 使用 BOOLEAN,MySQL 使用 TINYINT(1)
  4. JSON数据:PostgreSQL 优先用 JSONB,MySQL 5.7+ 用 JSON
  5. 字符串:根据实际长度选择,避免浪费空间
  6. 主键:优先使用 INTBIGINT 自增,分布式系统考虑 UUID
  7. 国际化:SQL Server 使用 NVARCHAR,其他数据库默认支持 UTF-8

性能优化提示

  • 字符串类型长度适中,过长影响索引效率
  • 避免使用 TEXT/BLOB 类型建索引
  • 合理使用 NOT NULL 约束提升查询效率
  • 时间字段建索引时注意精度
  • 大文件不要直接存数据库,使用文件系统 + 路径存储