14:事物

1. 什么是事物?

  • 事物就是一组sql语句的组合来完成一个任务,这组语句在逻辑上存在相关性,要么全部成功,要么全部失败,他们是一个整体。

  • 比如向别人转账,需要在我的账户update减去一定数额,然后在别人的账户update加上对应数额。两条update分开没有实际意义,但是组合后就变成了转账。

  • 事物是为了应用层服务的,并非数据库天生具有的。

  • mysql中只有InnoDB存储引擎支持。

2. 事物基本操作:

start transaction; // 启动事物
begin; // 启动事物
  • 事物在创建之后,后续的一连串sql语句都属于该事物。

savepoint xxx; // 创建保存点xxx,用于定向回滚
rollback to xxx; // 回滚到保存点xxx
rollback; // 回滚到最开始
commit; // 提交事物,操作会被持久化保存到数据库,不能再回滚
  • 启动事物之后,如果出现客户端崩溃,异常中止等情况,事物会自动会滚到最初。

3. 事物的提交方式:

  • 事物的提交方式分为手动提交和自动提交。

  • 自动提交只影响未启动事物的情况下,sql语句的提交方式。如果设置为1,就会自动提交。如果设置为0,则需要手动commit进行提交。

  • 在使用begin或者start transaction启动事物后,mysql会进入手动提交模式,此时只有用户主动commit才会进行提交。autocommit属性将不再生效。

show variables like 'autocommit'; // 查看事物的提交方式,
set autocommit=1; //开启自动提交
set autocommit=0; // 关闭自动提交

4. 单条sql语句和事物的关系:

  • 在开启自动提交后,每一条sql语句会被封装为一个事物,自动提交。


隔离性

  • 为了保证事物在执行过程中不被影响,就需要隔离性来保证。

  • 隔离级别是事物在执行过程中允许受到的干扰程度的级别。

1. 隔离级别(4种):

  • 读未提交、读已提交、可重复读、可串行化。

2. 查看与设置隔离级别:

select @@global.tx_isolation; //查看全局隔离级别,也就是配置文件中默认的隔离级别
select @@session.tx_isolation; // 查看当前会话的隔离级别,可修改,只在本次会话生效的隔离级别
select @@tx_isolation; // 查看当前回话隔离级别,简写
​
set session/global transaction isolation level {read uncommitted | read committed | repeatable read | serializable}; //设置全局/当前会话的隔离级别;全局隔离级别在修改后,会在下次会话加载配置文件后生效

3. 读未提交(read uncommitted):

  • 没有加锁,事物可以读取其他事务未提交的数据。

  • 并发性高,但是数据不安全。可能发生脏读、不可重复读、幻读现象。

  • 脏读:一个事物可以读到另一个事物的未commit的数据,如果事物发生回滚,那么读取到的数据就变为了脏数据。

4. 读已提交(read committed):

  • 只能读到其他事物已经提交的数据,解决了脏读问题。

  • 不能保证同一个事物内多次查询的结果是一致的,可能会发生不可重复度。如果一个事物在查询,另一个事物在修改,那么一旦修改的事物发生提交,查询的事物可能在连续的两次查询中查询到不同的结果。

  • 并发性较高,但是数据一致性依旧比较弱。

5. 可重复度(repeatable read):

  • mysql默认的隔离等级。

  • 在同一个事物内,多次读取的数据相同,结果始终保持一致。解决了脏读、不可重复度问题。

  • 仍可能发生幻读(Phantom Read),但 MySQL InnoDB 通过 GAP 锁(间隙锁) 避免了幻读问题。

6. 串行化(serializable):

  • mysql最高的隔离级别。

  • 所有事物串行执行,避免了脏读、不可重复度、幻读问题。

  • 会对所有读取加锁,大大降低了并发能力。


一致性:

  • 一致性是在技术上通过原子性、持久性、隔离性来保证的。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

S+叮当猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值