ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

MySQL 基础用法(下):查询进阶与核心特性

MySQL 基础用法(下):查询进阶与核心特性 本篇为 MySQL 入门第二篇重点讲解数据查询语法、常用函数、索引、事务与权限管理是日常开发的核心内容。一、数据查询SELECT详解查询是 MySQL 最常用的操作语法灵活功能丰富。以下示例均基于上一篇的student表。1. 基础查询sql-- 查询所有字段生产环境不推荐 *影响性能且不明确 SELECT * FROM student; -- 查询指定字段 SELECT id, name, age FROM student; -- 字段别名 SELECT name AS 姓名, age 年龄 FROM student; -- 去重查询 SELECT DISTINCT gender FROM student;2. 条件查询WHEREsql-- 比较运算符 SELECT * FROM student WHERE age 18; SELECT * FROM student WHERE gender 男; -- 逻辑运算符 AND / OR / NOT SELECT * FROM student WHERE age 18 AND gender 女; -- 范围查询 BETWEEN ... AND ... SELECT * FROM student WHERE age BETWEEN 18 AND 20; -- 枚举查询 IN SELECT * FROM student WHERE age IN (18, 20, 22); -- 模糊查询 LIKE% 匹配任意字符_ 匹配单个字符 SELECT * FROM student WHERE name LIKE 张%; SELECT * FROM student WHERE name LIKE _三; -- 空值判断 IS NULL / IS NOT NULL SELECT * FROM student WHERE gender IS NULL;3. 排序与分页sql-- 排序ASC 升序默认DESC 降序 SELECT * FROM student ORDER BY age DESC; -- 多字段排序 SELECT * FROM student ORDER BY age DESC, id ASC; -- 分页LIMIT 偏移量, 每页条数 SELECT * FROM student LIMIT 0, 3; -- 第1页每页3条 SELECT * FROM student LIMIT 3, 3; -- 第2页分页公式第 n 页每页 size 条 →LIMIT (n-1)*size, size4. 分组聚合查询sql-- 聚合函数 SELECT COUNT(*) 总人数 FROM student; SELECT MAX(age) 最大年龄, MIN(age) 最小年龄, AVG(age) 平均年龄 FROM student; SELECT SUM(age) 年龄总和 FROM student; -- 分组统计按性别统计人数 SELECT gender, COUNT(*) 人数 FROM student GROUP BY gender; -- 分组后筛选 HAVINGWHERE 筛选行HAVING 筛选分组结果 SELECT gender, AVG(age) 平均年龄 FROM student GROUP BY gender HAVING 平均年龄 19;5. 联表查询当数据分布在多张表中时通过关联字段连接查询。假设有另一张表class班级表student表有class_id字段关联班级。sql-- 内连接只返回两张表匹配的数据 SELECT s.name, c.class_name FROM student s INNER JOIN class c ON s.class_id c.id; -- 左连接返回左表全部数据右表无匹配则显示 NULL SELECT s.name, c.class_name FROM student s LEFT JOIN class c ON s.class_id c.id; -- 右连接返回右表全部数据左表无匹配则显示 NULL SELECT s.name, c.class_name FROM student s RIGHT JOIN class c ON s.class_id c.id;6. 子查询查询语句中嵌套另一个查询sql-- 查询年龄大于平均年龄的学生 SELECT * FROM student WHERE age (SELECT AVG(age) FROM student);二、常用内置函数1. 字符串函数sqlSELECT CONCAT(姓名, name) FROM student; -- 拼接字符串 SELECT LENGTH(name) FROM student; -- 字节长度 SELECT SUBSTRING(name, 1, 2) FROM student; -- 截取字符串 SELECT UPPER(name) FROM student; -- 转大写2. 数值函数sqlSELECT ROUND(3.1415, 2); -- 四舍五入保留2位 SELECT CEIL(3.1); -- 向上取整 SELECT FLOOR(3.9); -- 向下取整 SELECT ABS(-10); -- 绝对值3. 日期函数sqlSELECT NOW(); -- 当前日期时间 SELECT CURDATE(); -- 当前日期 SELECT DATE_ADD(NOW(), INTERVAL 7 DAY); -- 加7天 SELECT DATEDIFF(NOW(), 2020-01-01); -- 日期相差天数三、索引基础索引是提升查询速度的核心手段类似书籍的目录通过牺牲少量写入性能换取查询效率。1. 索引类型主键索引主键自动创建唯一且非空唯一索引字段值不允许重复普通索引最基础的索引联合索引多个字段组成的索引2. 索引操作sql-- 创建普通索引 CREATE INDEX idx_name ON student(name); -- 创建唯一索引 CREATE UNIQUE INDEX idx_name_unique ON student(name); -- 创建联合索引 CREATE INDEX idx_name_age ON student(name, age); -- 查看索引 SHOW INDEX FROM student; -- 删除索引 DROP INDEX idx_name ON student;3. 查看执行计划判断查询是否命中索引sqlEXPLAIN SELECT * FROM student WHERE name 张三;重点关注type列ALL表示全表扫描ref、range等表示命中索引。四、事务与存储引擎1. 事务四大特性ACID原子性Atomicity事务内操作要么全部成功要么全部失败一致性Consistency事务前后数据完整性保持一致隔离性Isolation多个事务之间互不干扰持久性Durability事务提交后数据永久生效2. 事务控制sql-- 开启事务 START TRANSACTION; -- 执行多条 SQL UPDATE account SET money money - 100 WHERE id 1; UPDATE account SET money money 100 WHERE id 2; -- 提交事务 COMMIT; -- 回滚事务出错时执行 ROLLBACK;3. 常用存储引擎InnoDBMySQL 默认引擎支持事务、外键、行级锁适合高并发写入场景MyISAM不支持事务表级锁查询速度快适合读多写少场景五、用户与权限管理1. 用户管理sql-- 创建用户指定用户名和访问主机 CREATE USER test_userlocalhost IDENTIFIED BY 123456; -- 修改密码 ALTER USER test_userlocalhost IDENTIFIED BY new_password; -- 删除用户 DROP USER test_userlocalhost;2. 权限控制sql-- 授予所有库所有表的查询、插入权限 GRANT SELECT, INSERT ON *.* TO test_userlocalhost; -- 授予所有权限 GRANT ALL PRIVILEGES ON test_db.* TO test_userlocalhost; -- 刷新权限 FLUSH PRIVILEGES; -- 撤销权限 REVOKE INSERT ON *.* FROM test_userlocalhost; -- 查看用户权限 SHOW GRANTS FOR test_userlocalhost;谢谢
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表