339 字
2 分钟
MySQL学习笔记 (2)
2026-08-26
NOTE

基于 MySQL 26.7。数据类型

数据类型#

创建表时要为每一列指定类型。常用类型:

类型含义
CHAR(n)定长字符串
VARCHAR(n)变长字符串,最长 n
INTEGER / INT整数
SMALLINT较小整数
BIGINT较大整数
NUMERIC(p,s) / DECIMAL(p,s)精确小数
REAL / DOUBLE PRECISION浮点数
DATE日期
TIME时间
TIMESTAMP日期 + 时间
BOOLEAN真 / 假

金额用 NUMERIC,例如 NUMERIC(12, 2) 表示最多 12 位数字,其中 2 位小数。

CHAR 不足长度时会补空格。空字符串 ''NULL 不是一回事。

日期时间#

日期和时间可以写成:

DATE '2026-09-01'
TIME '14:30:00'
TIMESTAMP '2026-09-01 14:30:00'

当前日期和时间:

CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP

取出年份、月份:

EXTRACT(YEAR FROM hire_date)
EXTRACT(MONTH FROM hire_date)

布尔#

BOOLEAN 的值是 TRUEFALSE,也可以是 NULL。

SELECT * FROM employee WHERE is_active = TRUE;

CAST#

CAST 用来转换类型:

CAST(emp_id AS CHAR(10))
CAST('2026-09-01' AS DATE)
CAST(3.14 AS NUMERIC(4, 2))

COALESCE(a, b, …) 返回第一个不是 NULL 的值。

字符串#

连接字符串用 CONCAT

SELECT CONCAT(last_name, ', ', first_name) AS full_name
FROM employee;

如果某一段是 NULL,整个 CONCAT 的结果也是 NULL。可以用 COALESCE 把 NULL 换成空字符串:

CONCAT(last_name, ', ', COALESCE(middle_name, ''))

常用函数:

函数作用
CHAR_LENGTH(s)字符个数
SUBSTRING(s FROM start FOR len)截取,起点从 1 开始
UPPER(s) / LOWER(s)大小写
SUBSTRING('abcdef' FROM 2 FOR 3) -- 结果是 bcd

参考#

  1. MySQL 26.7 · Data Types
  2. MySQL 26.7 · Date and Time Types
  3. MySQL 26.7 · CAST
  4. MySQL 26.7 · String Functions
  5. MySQL 26.7 · COALESCE
  6. ISO/IEC 9075(SQL<2023>
MySQL学习笔记 (2)
https://blog.chuwu.top/posts/sql/mysql2/
作者
ChuwuYo
发布于
2026-08-26
许可协议
CC BY-NC-SA 4.0