5、MySQL 常用值

MySQL 常用值清单,涵盖了实际开发中最频繁使用的默认值、函数和属性。

一、系统预定义值(标量值)

这是最基础的值类型,直接在 SELECTWHEREINSERT 等语句中使用。

 
类型示例说明
数字 123-453.140 直接书写,不需要引号。可以是整数或小数。
字符串 ‘Hello’‘张三’‘2023-10-27’ 必须用单引号 () 括起来。在标准 SQL 中,双引号通常用于标识符(如表名、列名)。
布尔值 TRUEFALSEUNKNOWN 表示真、假、未知。并非所有数据库都直接支持 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_DATECURRENT_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'

四、数值函数与数学常量

 
函数/常量说明示例
01 基础数值 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) → 4FLOOR(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 UNSIGNEDcount 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_TIMESTAMPNOW()
状态值 'pending''active''draft'
布尔值 truefalse10
数值 01UNSIGNED
文本 '' (空字符串), NULL

 

 

 

 

 

 

posted @ 2025-11-13 15:26  chao_xiong  阅读(5)  评论(0)    收藏  举报