5、MySQL 常用值
MySQL 常用值清单,涵盖了实际开发中最频繁使用的默认值、函数和属性。
一、系统预定义值(标量值)
这是最基础的值类型,直接在 SELECT、WHERE、INSERT 等语句中使用。
| 类型 | 示例 | 说明 |
|---|---|---|
| 数字 | 123, -45, 3.14, 0 |
直接书写,不需要引号。可以是整数或小数。 |
| 字符串 | ‘Hello’, ‘张三’, ‘2023-10-27’ |
必须用单引号 (‘) 括起来。在标准 SQL 中,双引号通常用于标识符(如表名、列名)。 |
| 布尔值 | TRUE, FALSE, UNKNOWN |
表示真、假、未知。并非所有数据库都直接支持 BOOLEAN 类型(如 MySQL 用 1 和 0 代替)。 |
| 日期时间 | DATE ‘2023-10-27’TIMESTAMP ‘2023-10-27 14:30:00’TIME ’14:30:00‘ |
不同数据库的语法略有差异。通常使用标准格式的字符串,并配合关键字或函数转换。 |
| 空值 | NULL |
表示缺失、未知或不适用的值。这是一个非常重要的概念,下面会单独说明。 |
CREATE TABLE products ( id INT AUTO_INCREMENT PRIMARY KEY, -- 数值默认值 price DECIMAL(10,2) DEFAULT 0.00, stock_quantity INT DEFAULT 0, view_count INT DEFAULT 0, -- 状态默认值 status VARCHAR(20) DEFAULT 'draft', is_available BOOLEAN DEFAULT true, -- 文本默认值 description TEXT DEFAULT '', tags JSON DEFAULT NULL );
重点:NULL 值详解
NULL 是一个特殊的值,它不等于任何值,甚至不等于另一个 NULL。
-
判断是否为 NULL:必须使用
IS NULL或IS NOT NULL,不能使用= NULL或<> NULL。
-- 正确 SELECT * FROM employees WHERE manager_id IS NULL; -- 错误(不会报错,但结果永远为空) SELECT * FROM employees WHERE manager_id = NULL;
-
与任何值计算的结果都是 NULL:
SELECT 10 + NULL; -- 结果是 NULL SELECT ‘Name: ’ || NULL; -- 结果是 NULL
二、日期时间函数(最常用)
| 函数 | 说明 | 返回格式 | 示例输出 |
|---|---|---|---|
NOW() |
返回当前日期时间。 |
YYYY-MM-DD HH:MM:SS |
2024-01-20 15:30:45 |
| YEAR(date) | 提取年份。 | 2023 | YEAR(‘2023-10-27’) |
| DATE_ADD(date, INTERVAL) | 日期加法。 | 2023-10-28 14:35:20 | DATE_ADD(NOW(), INTERVAL 1 DAY) 当前日期加1天 |
| DATEDIFF(date1, date2) | 日期差(天数)。 | 1 | DATEDIFF(‘2023-10-28’, ‘2023-10-27’) |
CURRENT_TIMESTAMP |
插入数据时,插入当前数据库服务器日期和时间。,时间戳 |
YYYY-MM-DD HH:MM:SS |
2024-01-20 15:30:45 |
CURDATE() |
当前日期 |
YYYY-MM-DD |
2024-01-20 |
CURTIME() |
当前时间 |
HH:MM:SS |
15:30:45 |
UTC_TIMESTAMP |
UTC 时间戳 | 2024-01-20 07:30:45 |
|
SYSDATE() |
执行时系统时间 | 2024-01-20 15:30:45 |
|
CURRENT_DATE, CURRENT_TIME |
返回当前数据库服务器的日期,时间 | 同 CURDATE(), CURTIME() |
日期计算函数:
-- 日期加减 DATE_ADD(NOW(), INTERVAL 1 DAY) -- 加1天 DATE_SUB(NOW(), INTERVAL 1 MONTH) -- 减1个月 -- 获取日期部分 YEAR(NOW()) -- 2024 MONTH(NOW()) -- 1 DAY(NOW()) -- 20 HOUR(NOW()) -- 15 MINUTE(NOW()) -- 30 -- 格式化 DATE_FORMAT(NOW(), '%Y-%m-%d') -- '2024-01-20' DATE_FORMAT(NOW(), '%H:%i:%s') -- '15:30:45'
CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, -- 记录创建时间(插入新数据时自动设置) created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- 记录更新时间(当前列的其中一项数据修改时,自动更新当前时间戳) updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- 订单日期(默认为今天) order_date DATE DEFAULT (CURDATE()), -- 支付时间(需要手动设置,默认为NULL) paid_at TIMESTAMP NULL );
三、字符串函数与值
| 函数/值 | 说明 | 示例 |
|---|---|---|
'' |
空字符串 | name VARCHAR(50) DEFAULT '' |
CONCAT() |
字符串连接 | CONCAT('Hello', ' ', 'World') → 'Hello World' |
SUBSTRING() |
截取子串 | SUBSTRING('MySQL', 3, 3) → 'SQL' |
LENGTH() |
返回字符串长度 | LENGTH('text') → 4 |
CHAR_LENGTH() |
字符数(支持中文) | CHAR_LENGTH('中文') → 2 |
UPPER(), LOWER() |
转换大小写 | UPPER('hello') → 'HELLO' |
TRIM() |
去除首尾空格 | TRIM(' hello ') → 'hello' |
REPLACE() |
字符串替换 | REPLACE('abc', 'b', 'x') → 'axc' |
四、数值函数与数学常量
| 函数/常量 | 说明 | 示例 |
|---|---|---|
0, 1 |
基础数值 | count INT DEFAULT 0 |
RAND() |
返回一个 0~1 之间的随机数。 | RAND() → 0.123456 |
ROUND(n,d) |
四舍五入 | ROUND(3.14159, 2) → 3.14 |
CEIL(n), FLOOR(n) |
向上/向下取整 | CEIL(3.1) → 4, FLOOR(3.9) → 3 |
ABS(n) |
绝对值 | ABS(-10) → 10 |
POW(n,d) |
幂运算 | POW(2, 3) → 8 |
MOD(n,d) |
取模 | MOD(10, 3) → 1 |
PI() |
圆周率 π | PI() → 3.141593 |
五、系统信息函数
| 函数 | 说明 | 返回值示例 |
|---|---|---|
VERSION() |
MySQL 版本 | '8.0.35' |
DATABASE() |
当前数据库 | 'my_database' |
USER(), CURRENT_USER() |
返回当前连接数据库的用户名。 | 'root@localhost' |
CONNECTION_ID() |
连接ID | 12345 |
LAST_INSERT_ID() |
最后插入的AUTO_INCREMENT值 | 1001 |
ROW_COUNT() |
受影响行数 | 1 |
FOUND_ROWS() |
查询到的行数 | 25 |
六、流程控制函数
| 函数 | 说明 | 示例 |
|---|---|---|
IF() |
条件判断 | IF(score >= 60, '及格', '不及格') |
CASE WHEN |
多条件判断 | CASE WHEN score >= 90 THEN '优秀' WHEN score >= 60 THEN '及格' ELSE '不及格' END |
COALESCE() |
返回第一个非NULL值 | COALESCE(NULL, NULL, 'default') → 'default' |
IFNULL() |
空值替换 | IFNULL(name, '未知') |
NULLIF() |
相等返回NULL | NULLIF(column, 0) |
七、JSON 相关函数(MySQL 5.7+)
| 函数 | 说明 | 示例 |
|---|---|---|
JSON_OBJECT() |
创建JSON对象 | JSON_OBJECT('name', 'John', 'age', 25) |
JSON_ARRAY() |
创建JSON数组 | JSON_ARRAY(1, 2, 3) |
JSON_EXTRACT() |
提取JSON值 | JSON_EXTRACT(data, '$.name') |
->, ->> |
JSON路径简写 | data->'$.name', data->>'$.name' |
八、聚合函数(用于 GROUP BY)
用于汇总多行数据,这些函数通常与 GROUP BY 子句一起使用。
| 函数 | 说明 |
|---|---|
COUNT(*) |
统计行数。 |
SUM(column) |
对某列值求和。 |
AVG(column) |
对某列值求平均值。 |
MAX(column) / MIN(column) |
求某列的最大/最小值。 |
GROUP_CONCAT() |
分组连接字符串 |
九、自动编号与唯一标识
| 值/属性 | 说明 | 使用场景示例 |
|---|---|---|
AUTO_INCREMENT |
自动生成唯一递增整数 | id INT AUTO_INCREMENT PRIMARY KEY |
UUID() |
生成全局唯一标识符 | id CHAR(36) DEFAULT (UUID()) |
示例:
-- 经典自增ID(95%的表都用这个) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) ); -- UUID(分布式系统、需要提前知道ID时) CREATE TABLE distributed_data ( id CHAR(36) DEFAULT (UUID()) PRIMARY KEY, content TEXT );
十、业务状态枚举值
这些是实际业务中最常用的状态值:
用户/订单状态:
-- 用户状态 status ENUM('active', 'inactive', 'suspended', 'banned') DEFAULT 'active' -- 订单状态 status ENUM('pending', 'confirmed', 'shipped', 'delivered', 'cancelled', 'refunded') DEFAULT 'pending' -- 支付状态 payment_status ENUM('unpaid', 'paid', 'failed', 'refunded') DEFAULT 'unpaid' -- 文章状态 article_status ENUM('draft', 'published', 'archived', 'deleted') DEFAULT 'draft'
布尔状态:
-- 是否类状态 is_active BOOLEAN DEFAULT TRUE is_verified BOOLEAN DEFAULT FALSE is_deleted BOOLEAN DEFAULT FALSE email_verified BOOLEAN DEFAULT FALSE
十一、数值范围属性
| 属性 | 说明 | 使用场景 |
|---|---|---|
UNSIGNED |
禁止负数,扩大正数范围 | age TINYINT UNSIGNED, count INT UNSIGNED |
CHECK |
数据范围验证 | age INT CHECK (age >= 0 AND age <= 150) |
示例:
CREATE TABLE employee ( id INT AUTO_INCREMENT PRIMARY KEY, -- 无符号数值 age TINYINT UNSIGNED DEFAULT 0, salary DECIMAL(10,2) UNSIGNED DEFAULT 0, vacation_days SMALLINT UNSIGNED DEFAULT 0, -- 范围检查 performance_rating DECIMAL(3,2) CHECK (performance_rating >= 0 AND performance_rating <= 5), working_hours INT CHECK (working_hours BETWEEN 0 AND 24) );
| 类别 | 最常用值 |
|---|---|
| 主键 | AUTO_INCREMENT |
| 时间戳 | CURRENT_TIMESTAMP, NOW() |
| 状态值 | 'pending', 'active', 'draft' |
| 布尔值 | true, false, 1, 0 |
| 数值 | 0, 1, UNSIGNED |
| 文本 | '' (空字符串), NULL |
本文来自博客园,作者:chao_xiong,转载请注明原文链接:https://www.cnblogs.com/chao-xiong/p/19218305

浙公网安备 33010602011771号