mysql - 事务理解

1.什么是事务?

一个事务是一个完整的业务逻辑单元(需要多条DML协同完成时需要用到事务),不可
再分;即同时成功或同时失败。

注意:和事务相关的DML语句有insert、delete、update;他的存在是为了保证数据的完整性和安全性。

2.事务的特性(ACID)

A: 原子性,事务是最小的工作单元不可再分
C: 一致性,事务必须保证统一事务中的多条DML语句同时成功或失败
I: 隔离性,事务A和事务B之间的隔离(四种隔离级别)
D: 持久性,最终数据必须持久化到硬盘上才算结束

3.事务的隔离级别

3.1 读未提交

读未提交(read uncommitted)
	可以读到对方事务未提交的数据,容易出现脏读;

例如:A B 两个事务的共同操作是查询某商品库存数量,A 减少了10件库存,但最
     终没有提交;在A事务结束之前B增加了库存数量,此时B读到的就是脏数据;
     导致库存数量出错。(B是基于A减少后的库存数量增加的,但是A事务最终并
     没有提交)

3.2 读已提交

读已提交(read committed)
	可以读取到对方事务已提交的数据,解决了脏读;仍会出现不可重复读的问题
	(即无法保证同一事务中相同的语句查到相同的结果)

例如:

3.3 可重复读

可重复读(repeatable read)
	解决了不可重复读的问题,当前事务中相同的语句查到的结果是一致的;但是容
	易出现幻读的问题。

例如:A B 两个事务要查XXX表记录的数量,A 先查到是100条,此时B删除了一条
	 数据,并且B在A之前提交。这个时候A事务查到到数量其实是不对的。

3.4 序列化读

也称为串行化读, 效率低,事务执行需要排队。 

拓展

  1. Oracle数据库事务的隔离级别默认是读已提交
  2. Mysql数据库事务的默认隔离级别是可重复读
  3. 注意:Mysql默认情况下是自动提交事务的,只要执行一次DML语句,就提交一次;这种qing情况下我们执行rollback是无效的,因为事务已经提交。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值