事务及设置MySQL隔离等级 学习笔记

什么是事务?

指访问并可能更新数据库中各项数据项的一个程序执行单元。

事务的四个特性

原子性:事务所包含的所有操作,要么全部执行,要么全部不执行,不能停滞在中间环节。事务在执行过程中出错,会回滚到事务开始前的状态,即事务是一个不可分割的整体。

一致性:事务在开始和结束时,应满足一致性约束。如将订单行写到了磁盘上,却没有写入相应的订单明细,则订单与订单明细之间的一致性就被破坏了;操作之前和操作之后总量是不变的,理解:A和B都有100元,A给B了100元,A和B的钱数总和还是200元。

隔离性:指多个事务并发访问时,事务之间是隔离的,,一个事务不应该影响其他事务运行,即多个并发事务之间要相互隔离

持久性:对数据库所做的更改需持久的保存在数据库中,不会被回滚。即事务完成之后,结果能持久维持下去,不管断电还是其他情况。

脏读,不可重复读,幻读

脏读:读取到另一个事务回滚前的脏数据。即事务B对数据进行修改,事务读取了修改之后的数据,B又对此数据进行了回滚,此时A读到的数据就叫脏数据。

不可重复读:事务A读取数据后,事务B对此数据进行更改,当A再进行读取时,发现数据改变了。

幻读:在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。

不可重复读针对的是update或delete,幻读针对的是insert。

事务隔离级别

Read uncommitted (读未提交)
Read Committed (读已提交)
Repeatable Reads (可重复读)
Serializable (串行化)
隔离级别脏读不可重复读幻读
Read uncommitted (读未提交)
Read Committed (读已提交)
Repeatable Reads (可重复读)
Serializable (串行化)

隔离级别越高执行效率越低。

MySQL支持以上四种隔离级别,默认隔离级别为Repeatable Reads (可重复读)。
Oracle 只支持Serializable (串行化)和Read Committed (读已提交),默认隔离级别为Read Committed (读已提交)。

设置MysQL的事务隔离级别

– 查看当前事物级别:
SELECT @@tx_isolation;

– 设置事务隔离级别
set session transaction isolation level ;
global:设置全局的事务隔离级别;
session:设置当前session的事务隔离级别,如果语句没有指定global或session,默认值为session;

– 设置read uncommitted级别:
set session transaction isolation level read uncommitted;

– 设置read committed级别:
set session transaction isolation level read committed;

– 设置repeatable read级别:
set session transaction isolation level repeatable read;

– 设置serializable级别:
set session transaction isolation level serializable;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值