SQL 基础与数据类型

最后更新: 2026-01-22 作者: MySQL Team
页面目录

第二章:SQL 基础与数据类型


2.1 SQL 概述

什么是 SQL

SQL(Structured Query Language)是用于管理关系型数据库的标准编程语言。

SQL 语句分类

分类 语句 说明
DDL CREATE, ALTER, DROP 数据定义语言
DML SELECT, INSERT, UPDATE, DELETE 数据操作语言
DCL GRANT, REVOKE 数据控制语言
TCL COMMIT, ROLLBACK, SAVEPOINT 事务控制语言

2.2 数据类型

数值类型

类型 大小 范围(有符号) 范围(无符号) 用途
TINYINT 1字节 -128~127 0~255 小整数
SMALLINT 2字节 -32768~32767 0~65535 大整数
INT 4字节 -21亿~21亿 0~42亿 整数
BIGINT 8字节 极大 0~极大 超大整数
FLOAT 4字节 ±3.4E38 - 单精度
DOUBLE 8字节 ±1.7E308 - 双精度
DECIMAL 变长 取决于定义 - 精确数值
-- 数值类型示例
CREATE TABLE numeric_demo (
    tiny_col   TINYINT,           -- 1字节
    small_col  SMALLINT,          -- 2字节
    int_col    INT,               -- 4字节
    big_col    BIGINT,            -- 8字节
    float_col  FLOAT(10,2),      -- 总10位,小数2位
    double_col DOUBLE,           -- 双精度
    decimal_col DECIMAL(15,2)    -- 精确小数:9999999999999.99
);

字符串类型

类型 大小 说明
CHAR(n) 0-255 固定长度,不足补空格
VARCHAR(n) 0-65535 可变长度
TINYTEXT 255字节 短文本
TEXT 65535字节 文本
MEDIUMTEXT 16MB 中等文本
LONGTEXT 4GB 长文本
-- 字符串类型示例
CREATE TABLE string_demo (
    fixed_char  CHAR(10),        -- 固定10字符
    var_char    VARCHAR(255),   -- 最多255字符
    tiny_text   TINYTEXT,       -- 短文本
    article     TEXT,           -- 文章内容
    long_text   LONGTEXT        -- 长文本
);

CHAR vs VARCHAR 对比:

特性 CHAR VARCHAR
存储方式 固定长度 可变长度
性能 查询快 节省空间
尾部空格 自动补足 保留
适合场景 固定长度(性别、状态码) 长度不固定(用户名、地址)

日期时间类型

类型 大小 格式 范围
DATE 3字节 YYYY-MM-DD 1000-01-01 ~ 9999-12-31
TIME 3字节 HH:MM:SS -838:59:59 ~ 838:59:59
DATETIME 8字节 YYYY-MM-DD HH:MM:SS 1000-01-01 ~ 9999-12-31
TIMESTAMP 4字节 YYYY-MM-DD HH:MM:SS 1970-01-01 ~ 2038-01-19
YEAR 1字节 YYYY 1901 ~ 2155
-- 日期时间类型示例
CREATE TABLE datetime_demo (
    birth_date  DATE,           -- 生日:2024-01-15
    work_time   TIME,           -- 工时:08:30:00
    create_dt   DATETIME,       -- 创建时间:2024-01-15 10:30:00
    update_ts   TIMESTAMP,      -- 更新时间,自动更新
    entry_year  YEAR            -- 入学年份:2024
);

-- 插入示例
INSERT INTO datetime_demo VALUES
('2024-01-15', '08:30:00', '2024-01-15 10:30:00', NOW(), 2024);

JSON 类型(MySQL 5.7+)

-- JSON 类型示例
CREATE TABLE json_demo (
    id      INT PRIMARY KEY,
    meta    JSON
);

-- 插入 JSON 数据
INSERT INTO json_demo VALUES (1, '{"name": "张三", "age": 25, "skills": ["Python", "MySQL"]}');

-- 查询 JSON 字段
SELECT meta->>'$.name' FROM json_demo;  -- 张三
SELECT JSON_EXTRACT(meta, '$.age') FROM json_demo;  -- 25

-- 更新 JSON 字段
UPDATE json_demo SET meta = JSON_SET(meta, '$.age', 26) WHERE id = 1;

枚举与集合

-- ENUM 类型
CREATE TABLE enum_demo (
    gender ENUM('M', 'F', 'Unknown'),
    status ENUM('active', 'inactive', 'pending') DEFAULT 'pending'
);

INSERT INTO enum_demo VALUES ('M', 'active');

-- SET 类型(可多选)
CREATE TABLE set_demo (
    hobbies SET('reading', 'music', 'sports', 'coding')
);

INSERT INTO set_demo VALUES ('reading,music,coding');

2.3 运算符与表达式

算术运算符

运算符 说明 示例
+ 加法 5 + 3 = 8
- 减法 5 - 3 = 2
* 乘法 5 * 3 = 15
/ 除法 5 / 3 = 1.67
DIV 整除 5 DIV 3 = 1
% 或 MOD 取余 5 % 3 = 2

比较运算符

运算符 说明
= 等于
<>, != 不等于
> 大于
< 小于
>= 大于等于
<= 小于等于
BETWEEN 在范围内
IN 在列表中
LIKE 模式匹配
IS NULL 为空
IS NOT NULL 不为空
-- 比较运算符示例
SELECT * FROM users WHERE age >= 18;
SELECT * FROM products WHERE price BETWEEN 100 AND 500;
SELECT * FROM users WHERE name IN ('张三', '李四', '王五');
SELECT * FROM users WHERE email LIKE '%@example.com';

逻辑运算符

运算符 说明 优先级
NOT 或 ! 逻辑非 最高
AND 或 && 逻辑与
OR 或 || 逻辑或 最低
XOR 逻辑异或 -
-- 逻辑运算符示例
SELECT * FROM users WHERE age >= 18 AND status = 'active';
SELECT * FROM orders WHERE status = 'shipped' OR status = 'delivered';
SELECT * FROM users WHERE NOT status = 'banned';

位运算符

运算符 说明
& 按位与
| 按位或
^ 按位异或
~ 按位取反
« 左移
» 右移

2.4 常用函数

字符串函数

函数 说明 示例
CONCAT 拼接字符串 CONCAT(‘Hello’, ’ ‘, ‘World’)
LENGTH 字符串长度 LENGTH(‘Hello’)
UPPER/LOWER 大小写转换 UPPER(‘hello’)
TRIM 去除空格 TRIM(’ hello ‘)
SUBSTRING 截取字符串 SUBSTRING(‘Hello’, 1, 3)
REPLACE 替换字符串 REPLACE(‘Hello’, ’l’, ‘x’)
LPAD/RPAD 填充字符串 LPAD(‘5’, 3, ‘0’)
INSTR 查找子串 INSTR(‘Hello’, ’ll’)
-- 字符串函数示例
SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM users;
SELECT UPPER('hello');           -- HELLO
SELECT TRIM('  hello  ');        -- hello
SELECT SUBSTRING('HelloWorld', 1, 5);  -- Hello
SELECT REPLACE('HelloWorld', 'World', 'MySQL');  -- HelloMySQL

数值函数

函数 说明 示例
ABS 绝对值 ABS(-5)
ROUND 四舍五入 ROUND(3.14159, 2)
CEIL/CEILING 向上取整 CEIL(3.1)
FLOOR 向下取整 FLOOR(3.9)
MOD 取余 MOD(10, 3)
POW/POWER 幂运算 POW(2, 3)
SQRT 平方根 SQRT(16)
RAND 随机数 RAND()
-- 数值函数示例
SELECT ABS(-10);                 -- 10
SELECT ROUND(3.14159, 3);       -- 3.142
SELECT CEIL(3.1);                -- 4
SELECT FLOOR(3.9);               -- 3
SELECT RAND();                   -- 0-1 之间的随机数

日期时间函数

函数 说明 示例
NOW/CURRENT_TIMESTAMP 当前时间戳 NOW()
CURDATE/CURRENT_DATE 当前日期 CURDATE()
CURTIME/CURRENT_TIME 当前时间 CURTIME()
DATE 提取日期 DATE(‘2024-01-15 10:30:00’)
TIME 提取时间 TIME(‘2024-01-15 10:30:00’)
YEAR/MONTH/DAY 提取年月日 YEAR(NOW())
DATE_FORMAT 格式化日期 DATE_FORMAT(NOW(), ‘%Y-%m-%d’)
DATE_ADD/DATE_SUB 日期加减 DATE_ADD(NOW(), INTERVAL 7 DAY)
DATEDIFF 日期差 DATEDIFF(‘2024-01-15’, ‘2024-01-01’)
-- 日期函数示例
SELECT NOW();                                    -- 2024-01-15 10:30:00
SELECT CURDATE();                               -- 2024-01-15
SELECT DATE_FORMAT(NOW(), '%Y年%m月%d日');      -- 2024年01月15日
SELECT DATE_ADD(NOW(), INTERVAL 30 DAY);        -- 30天后
SELECT DATEDIFF('2024-12-31', NOW());           -- 距年底天数
SELECT DATE_FORMAT(create_time, '%Y-%m') AS month FROM orders;

条件函数

-- IF 函数
SELECT IF(age >= 18, '成年', '未成年') FROM users;

-- IFNULL 函数
SELECT IFNULL(nickname, '匿名用户') FROM users;

-- CASE 语句
SELECT
    name,
    score,
    CASE
        WHEN score >= 90 THEN '优秀'
        WHEN score >= 80 THEN '良好'
        WHEN score >= 60 THEN '及格'
        ELSE '不及格'
    END AS grade
FROM students;

-- NULLIF 函数:两个值相同返回 NULL
SELECT NULLIF(a, b) FROM table_name;

聚合函数

函数 说明
COUNT 计数
SUM 求和
AVG 平均值
MAX 最大值
MIN 最小值
GROUP_CONCAT 连接分组值
-- 聚合函数示例
SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT department) FROM employees;
SELECT SUM(salary) FROM employees;
SELECT AVG(age) FROM users;
SELECT MAX(price), MIN(price) FROM products;
SELECT department, GROUP_CONCAT(name) FROM employees GROUP BY department;

2.5 注释

-- 单行注释(MySQL 特有)
# 单行注释(Shell 风格)

/* 
   多行注释
   可跨越多行
*/

2.6 本章小结

✅ SQL 分为 DDL、DML、DCL、TCL 四大类
✅ 掌握数值、字符串、日期时间等核心数据类型
✅ 熟练使用各种运算符和表达式
✅ 记住常用函数:字符串、数值、日期、聚合函数

📖 下章预告:数据库与表操作