-- 插入单条数据INSERT INTO `user`(`name`,`age`,`gender`) VALUES('张三',20,'男');
-- 插入多条数据INSERT INTO `user`(`name`,`age`,`gender`) VALUES('李四',22,'女'),('王五',25,'男');
-- 插入所有字段(按表结构顺序)INSERT INTO `user` VALUES(NULL,'赵六',18,'未知',NOW());
-- id 自增,传 NULL 即可
4.3.2 更新数据(UPDATE)
-- 修改单条数据(务必加 WHERE,否则修改全表!)UPDATE `user` SET `age`=21WHERE `id`=1;
-- 修改多条数据UPDATE `user` SET `gender`='未知'WHERE `age`<20;
4.3.3 删除数据(DELETE)
-- 删除指定数据(务必加 WHERE!)DELETEFROM `user` WHERE `id`=3;
-- 清空表(保留表结构,自增 ID 重置)TRUNCATETABLE `user`;
-- 按性别分组,统计每组人数和平均年龄SELECT `gender`, COUNT(*) AS `total`, AVG(`age`) AS `avg_age`
FROM `user`
GROUPBY `gender`
HAVING `avg_age`>20;
-- 过滤分组后的结果(WHERE 过滤原始数据)
5.3 连接查询(多表关联)
假设有两张表:user(用户表)、order(订单表,含 user_id 关联 user.id)。
连接类型
作用
语法
INNER JOIN
只查两表匹配的数据
FROM user INNER JOIN order ON user.id = order.user_id
LEFT JOIN
查左表所有数据,右表匹配不上则为 NULL
FROM user LEFT JOIN order ON user.id = order.user_id
示例:
-- 查询每个用户的姓名和对应的订单数SELECT u.`name`, COUNT(o.`id`) AS `order_count`
FROM `user` u
LEFTJOIN `order` o ON u.`id` = o.`user_id`
GROUPBY u.`id`;
5.4 子查询
嵌套在其他 SQL 中的查询(分「标量子查询」「行子查询」「表子查询」):
-- 标量子查询:查询年龄大于平均年龄的用户SELECT `name`,`age`
FROM `user`
WHERE `age`>(SELECTAVG(`age`) FROM `user`);
-- 表子查询:查询订单数大于 5 的用户SELECT*FROM `user`
WHERE `id` IN(
SELECT `user_id`
FROM `order`
GROUPBY `user_id`
HAVINGCOUNT(*)>5
);
MySQL 函数
6.1 字符串函数
函数
作用
示例
CONCAT(a,b)
拼接字符串
CONCAT('姓名:', name)
LENGTH(str)
字符串长度(字节)
LENGTH(name)
SUBSTR(str,start,len)
截取字符串
SUBSTR(name,1,2)
TRIM(str)
去除首尾空格
TRIM(name)
6.2 数值函数
函数
作用
示例
ROUND(num,n)
四舍五入(保留 n 位小数)
ROUND(3.1415,2) → 3.14
ABS(num)
绝对值
ABS(-5) → 5
CEIL(num)
向上取整
CEIL(3.2) → 4
FLOOR(num)
向下取整
FLOOR(3.9) → 3
6.3 日期时间函数
函数
作用
示例
NOW()
当前时间(日期 + 时间)
NOW() → 2026-01-10 10:00:00
DATE(NOW())
提取日期
DATE(NOW()) → 2026-01-10
YEAR(NOW())
提取年份
YEAR(NOW()) → 2026
DATEDIFF(d1,d2)
计算 d1-d2 的天数差
DATEDIFF(NOW(), '2026-01-01') → 9
6.4 聚合函数(重点)
函数
作用
示例
COUNT(*)
统计行数(包含 NULL)
COUNT(*)
SUM(字段)
求和
SUM(age)
AVG(字段)
平均值
AVG(age)
MAX(字段)
最大值
MAX(age)
MIN(字段)
最小值
MIN(age)
数据约束
约束用于保证数据的完整性和一致性,核心约束如下:
约束类型
关键字
作用
示例
非空约束
NOT NULL
字段不能为空
name VARCHAR(50) NOT NULL
唯一约束
UNIQUE
字段值唯一(可多个 NULL)
phone VARCHAR(11) UNIQUE
主键约束
PRIMARY KEY
非空 + 唯一,标识唯一记录
id INT PRIMARY KEY AUTO_INCREMENT
外键约束
FOREIGN KEY
关联另一张表的主键,保证数据关联完整性
user_id INT FOREIGN KEY REFERENCES user(id)
默认约束
DEFAULT
字段默认值
gender ENUM('男','女') DEFAULT '男'
外键示例:创建订单表关联用户表
CREATE TABLE `order` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`order_no` VARCHAR(30) NOT NULLUNIQUE COMMENT '订单号',
`user_id` INT UNSIGNED NOT NULL COMMENT '关联用户 ID',
`amount` DECIMAL(10,2) NOT NULL COMMENT '订单金额',
PRIMARY KEY (`id`),
-- 外键约束:user_id 关联 user 表的 id,删除用户时级联删除订单FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ONDELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 创建普通索引CREATE INDEX idx_user_name ON `user`(`name`);
-- 创建复合索引CREATE INDEX idx_user_name_age ON `user`(`name`,`age`);
-- 查看索引SHOW INDEX FROM `user`;
-- 删除索引DROP INDEX idx_user_name ON `user`;