博客
关于我
MySQL(5)条件查询 | 单行函数 | 事务详解
阅读量:793 次
发布时间:2023-02-13

本文共 2276 字,大约阅读时间需要 7 分钟。

MySQL 学习指南

一、SELECT 语句

1. where 条件查询

从数据库中筛选满足条件的记录。

  • where 条件可以基于字段的值、范围、或其他条件筛选数据。
  • 常用函数:
    • COUNT(*):统计记录数。
    • COUNT(DISTINCT expr):去重后统计非 NULL 值数。
    • MIN(expr):获取字段的最小值。
    • MAX(expr):获取字段的最大值。
    • SUM(expr):计算字段的总和。

示例:

SELECT COUNT(*) FROM t_employee;  # 统计员工表的总记录数SELECT COUNT(DISTINCT dept_id) FROM t_employee;  # 统计部门 ID 的去重后非 NULL 值数

2. group by 分组查询

用于对结果进行分组统计,常配合聚合函数使用。

  • group by 子句指定分组依据。
  • 可配合 COUNT、AVG、MIN、MAX、SUM 等聚合函数实现统计。

示例:

SELECT dept_id, COUNT(*) FROM t_employee GROUP BY dept_id;  # 统计每个部门的人数

3. having 过滤

用于在分组查询后进一步筛选结果。

  • having 与 where 类似,但只能用于 group by 查询。
  • 可使用聚合函数进行过滤。

示例:

SELECT dept_id, COUNT(*) AS c FROM t_employee GROUP BY dept_id HAVING c < 3;  # 显示部门人数少于 3 人的信息

4. order by 排序

按指定字段对结果进行排序。

  • 默认升序(asc),可加上 desc 指定降序。
  • 可同时指定多个字段进行多级排序。

示例:

SELECT t_employee.eid, basic_salary FROM t_employee INNER JOIN t_salary ON t_employee.eid = t_salary.eid ORDER BY basic_salary, eid;  # 按基本工资升序排列,工资相同则按 eid 升序排列

5. limit 分页

用于限制返回的记录数量。

  • limit m,n 表示从第 m 条记录开始,取 n 条记录。
  • 常用公式:limit (page-1)*n, n,其中 page 为页码,n 为每页显示的记录数。

示例:

SELECT * FROM t_employee LIMIT 5,5;  # 查看前 5 页,每页显示 5 条记录

二、单行函数

MySQL 提供丰富的函数,涵盖数学、字符串、日期时间等多个领域。

1. 数学函数

  • 常用函数:
    • ABS(expr):绝对值。
    • MOD(expr, divisor):取模运算。
    • RAND():随机数生成。

2. 字符串函数

  • 常用函数:
    • CONCAT(str1, str2, ...):拼接字符串。
    • LENGTH(str):获取字符串长度。
    • NOW():获取当前时间和日期。

3. 日期时间函数

  • 常用函数:
    • DATE_ADD(datetime, INTERVAL expr type):日期加减运算。
    • DATE_FORMAT(datetime, fmt):格式化日期。
    • STR_TO_DATE(str, fmt):字符串转日期。

示例:

DATE_FORMAT('2024-05-15', '%Y-%m-%d')  # 返回 '2024-05-15'STR_TO_DATE('2024-05-15 12:34:56', '%Y-%m-%d %H:%i:%S')  # 返回对应的 timestamp

三、事务

1. 事务 ACID 特性

  • 原子性(Atomicity):所有操作要么全部成功,要么全部失败。
  • 一致性(Consistency):事务提交前数据处于一致状态。
  • 隔离性(Isolation):事务操作对其他事务不可见。
  • 持久性(Durability):事务提交后数据持久化。

2. 事务操作

  • 开启事务:START TRANSACTION
  • 提交事务:COMMIT
  • 回滚事务:ROLLBACK
  • 手动提交:SET autocommit = false

示例:

SET autocommit = false;  # 手动事务模式START TRANSACTION;INSERT INTO t_stu_detail VALUES (1, '...', '...', '...', '...');SAVEPOINT point1;INSERT INTO t_stu_detail VALUES (2, '...', '...', '...', '...');ROLLBACK TO point1;  # 回滚到保存点COMMIT;  # 提交事务

四、事务隔离级别

1. 脏读

  • 一个事务读取了另一个事务未提交的数据,可能导致数据不一致。

2. 不可重复读

  • 一个事务读取数据后,再次读取时发现数据已经被修改提交,导致数据不一致。

3. 幻读

  • 一个事务读取数据后,另一个事务修改了数据,导致读取的数据不一致。

4. 序列化

  • 高度的隔离级别,确保事务操作只能在完全不干扰的情况下执行。

五、锁

1. 行级锁

  • InnoDB 支持行级锁,适用于高并发环境。

2. 表级锁

  • InnoDB 在序列化隔离级别下使用表级锁。

以上内容可根据实际需求进行扩展和修改,希望对学习 MySQL 有所帮助!

转载地址:http://iedfk.baihongyu.com/

你可能感兴趣的文章
MySQL最大建议行数 2000w,靠谱吗?
查看>>
MySQL有哪些锁
查看>>
MySQL服务器安装(Linux)
查看>>
mysql服务器查询慢原因分析方法
查看>>
mysql服务无法启动的问题
查看>>
MySQL杂谈
查看>>
mysql权限
查看>>
mysql条件查询
查看>>
MySQL条件查询
查看>>
MySQL架构与SQL的执行流程_1
查看>>
MySQL架构与SQL的执行流程_2
查看>>
MySQL架构介绍
查看>>
MySQL架构优化
查看>>
MySQL查看数据库相关信息
查看>>
MySQL查看表结构和表中数据
查看>>
MySQL查询优化:LIMIT 1避免全表扫描
查看>>
MySQL查询优化之索引
查看>>
mysql查询储存过程,函数,触发过程
查看>>
mysql查询总成绩的前3名学生信息
查看>>
mysql查询慢排查
查看>>