MySQL事务

什么是事务?
事务:
数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元);
典型事务场景(转账): update user_account set balance = balance - 1000 where userID = 3; update user_account set balance = balance +1000 where userID = 1;
mysql中如何开启事务:
1.begin / start transaction – 手工 commit / rollback
BEGIN/START TRANSACTION;
UPDATE t_pro set name=‘AAA’ WHERE id=1;
COMMIT/rollback;
2.-- 事务提交或回滚
show VARIABLES like ‘autocommit’
set session autocommit = on/off;
-3.- 设定事务是否自动开启
JDBC 编程: connection.setAutoCommit(boolean);
Spring 事务AOP编程: expression=execution(com.gpedu.dao..(…))

事务的特性
原子性(Atomicity) 最小的工作单元,整个工作单元要么一起提交成功,要么全部失败回滚
一致性(Consistency) 事务中操作的数据及状态改变是一致的,即写入资料的结果必须完全符合预设的规则, 不会因为出现系统意外等原因导致状态的不一致
隔离性(Isolation) 一个事务所操作的数据在提交之前,对其他事务的可见性设定(一般设定为不可见)
持久性(Durability) 事务所做的修改就会永久保存,不会因为系统意外导致数据的丢失

并发情况下隔离性带来的问题
读脏
不可重复读
读幻

事务的四种隔离级别
SQL92 ANSI/ISO标准: http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt
Read Uncommitted(未提交读) --未解决并发问题 事务未提交对其他事务也是可见的,脏读(dirty read)
Read Committed(提交读) --解决脏读问题 一个事务开始之后,只能看到自己提交的事务所做的修改,不可重复读(nonrepeatable read)
Repeatable Read (可重复读) --解决不可重复读问题 在同一个事务中多次读取同样的数据结果是一样的,这种隔离级别未定义解决幻读的问题
Serializable(串行化) --解决所有问题 最高的隔离级别,通过强制事务的串行执行、

InnoDB对隔离级别的支持程度
MySQL默认的事务隔离级别是RR级别(可重复读)
在这里插入图片描述
在这里插入图片描述

隔离级别通过锁,mvcc实现。
隔离级别的可重复读,在InnoDB中不可能幻读是通过临键锁和mvcc解决的。
幻读:当前读通过临键锁,快照读通过Mvcc解决。

上一篇:MySQL内部原理深度解析
下一篇:mysql-影响MySQL索引的因素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值