Mysql中的事务

Mysql中的事务

文章参考:https://mp.weixin.qq.com/s/2cTptvB5BPKzo92FT1yQXA

  1. 什么是事务?
    事务可以看成是一组原子性的SQL语句,事务中的语句,要么全部执行成功,要么全部执行失败。
  2. 事务相关的语法
 BEGIN / START TRANSACTION 			显式的开启事务
 COMMIT / COMMIT WORK 				事务提交
 ROLLBACK / ROLLBACK WORK 			事务回滚
 SAVEPOINT point1 					在事务中创建一个保存点,一个事务中可以创建多个保存点
 ROLLBACK TO point1 				将事务回滚到保存点point1
 SET TRANSACTION isolation level	用来设计事务的隔离级别
  1. 事务的ACID特性
  • 原子性(atomicity)
    一个事务被看成一个不可拆分的整体,整个事务要么全部执行成功,要么全部执行失败,不可能只执行其中的一部分。
  • 一致性(consistency)
    事务在执行之前与之后,数据库都处于一致性状态。在事务提交之前,事务中对数据所作的修改不会保存到数据库中,只有正确执行所有语句,执行事务提交后,才会对数据进行修改。
  • 隔离性(isolation)
    一个事务的执行不能被其他事务干扰,事务与事务之间互不干扰,相互隔离。
  • 持久性(durability)
    一个事务一但提交成功,事务中对数据的修即是永久性的修改,即使发生故障或崩溃,只要数据库能够重新启动,修改后的数据也不会丢失。
  1. 四个隔离级别
  • Read Uncommited 未提交读
    所有事务都可以看到其他事务未提交的修改。
  • Read Commited 提交读
    一个事务只能看到其他已经提交的事务所做的变更。
  • Repeatable Read 可重复读
    确保同一个事务的多个实例在并发读取数据时会看到相同的数据行。
  • Serializable 可串行化
    最高的隔离级别,完全串行化读,事务串行执行,读取的每一行数据都加锁,会导致大量的超时和锁争用问题。
  1. 各个隔离级别是否能够发生脏读,不可重复和幻读。
    在这里插入图片描述
  2. 脏读、不可重复读、幻读
  • 脏读
    比如事务A和B,当事务A对某条数据进行了修改,但尚未提交,事务B能够读取到事务A未提交但已修改的数据。
    在这里插入图片描述
  • 不可重复读
    事务A和B,事务A对某条数据查询之后,事务B修改了该条数据,并且提交事务,此时事务A再次查询该条数据时,与第一次查询的结果不同。
    在这里插入图片描述
  • 幻读
    事务A和B,事务A查询到符合条件的N条记录,事务B插入了一条新的记录或删除了一条记录,提交事务,此时事务A再次查询时会查询到N+1条或N-1条数据。
    在这里插入图片描述
  1. MySql8的事务语句,MySql7中,把TRANSACTION ISOLATION 换成tx_isolation
  • 设置当前会话的事务隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL 隔离级别
  • 设计全局的事务隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL 隔离级别
  • 查询当前会话的事务隔离级别
SELECT @@Session.TRANSACTION_ISOLATION 
  • 查询全局的事务隔离级别
SELECT @@Global.TRANSACTION_ISOLATION
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值