mysql基础--事务

mysql基础--事务

用于保持数据的一致性,它由一组相关的dml语句组成,该组成的dml语句要么全部成功,要么全部失败,如转账就要用事务来处理,用以保证数据的一致性

  • 事务和锁

    当执行事务操作时,mysql会在表上加锁,防止其他用户改表的数据,这对用户非常重要

  • ACID

    • 原子性(Atomicity):事务是不可分割的工作单位,要么都发生,都么都不发生
    • 一致性(Consistency):必须使数据库从一个一致性状态变换到另外一个一致性状态
    • 隔离性(Isolation):多个用户并发访问数据库时,为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离
    • 持久性(Durability):指一个事务一旦被提交,它对数据的改变就是永久性的,即使后续数据库故障,也不该对它有任何影响
  • 重要操作

    • start transaction -- 开始一个事务
    • savepoint 保存点名-- 设置保存点
    • rollback to -- 保存点名- 回滚至保存点
    • rollback -- 回退全部事务
    • commit -- 提交事务,所有操作生效,不能回退
  • 细节

    • 默认情况下,dml操作是自动提交的,也就是实时commit
    • 如果开始一个事务,但是没有创建保存点,你可以执行rollback,默认就是回退到事务开始状态
    • 在事务中可以设置多个保存点
    • 未提交前可以退回到任意保存点,但是选择了前面的保存点,后面的保存点就无法使用了
    • 事务机制需要在innodb的存储引擎下使用,myisam不能用
    • 开始一个事务可以使用:1. start transaction 2.set autocommit=off
  • 隔离级别

    • 概念

      • 多个链接开启各自事务操作数据库中数据时,数据库系统要负责隔离操作,以保证各个连接在获取数据时的准确性

      • 如果不考虑隔离性,可能会引发:

        脏读:当一个事务读取另一个事务尚未提交的修改时产生

        不可重复读:同一个查询在同一事务中多次进行,由于其他事务所做的修改或删除,每次返回不同的结果集,此时发生(少了,或同一条数据不一致)

        幻读:同一个查询在同一事务中多次进行,由于其他事务所做的插入,每次返回不同的结果集,此时发生(多了新数据)

    • 级别(建立在事务下,没有事务就没有隔离级别)

      • 读未提交:一个事务操作中可以被其他事务未提交的数据所影响,就是看到未提交的数据
      • 读已提交:一个事务操作中可以被其他事务提交的数据所影响,就是看到提交的数据
      • 可重复读:一个事务操作中不会被其他事务修改后的数据所影响,它只会操作自己开启事务时的数据,类似虚拟环境
      • 可串行化:一个事务操作中如果发现其他事务也在对同一张表操作未提交,会等对方结束,再进行自己的操作

  • 代码示范

    mysql默认事务级别时repeatble read,一般情况无需修改,满足大部分项目需求

    -- 查看当前会话事务隔离级别
    select @@tx_isolation;
    -- 查看系统当前的隔离级别
    select @@globa.tx_isolation
    -- 设置当前会话隔离级别为(read uncommitted)
    set session transaction isolation level read uncommitted
    -- 设置系统当前隔离级别为(read uncommitted)
    set session transaction isolation level read uncommitted
    
  • 全局修改

    修改安装目录下my.ini配置文件,在最后加上如下

    [mysqld]
    transaction-isolation = REPEATABLE-READ
    

    值可选参数有:READ-UNCOMMITTED,READ-COMMITTED,REPEATABLE-READ,SERIALIZABLE

posted @   邵泽龙  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示