Mysql5.7 事务

一、事务的四大特性

① A atomicity 原子性 

事务是原子的,要么都执行,要么都不执行。

② C consistency 一致性

保证数据的一致性,例如数据的约束等,

③ I isolation 隔离性

一个事务的执行对于另外一个事务是不可见的,类似透明的,事务之间是彼此独立的。

④ D durable 持久性

数据保存了就不会丢失

二、事务的隔离级别

 

① 脏读

当事务a更新数据未提交时,事务b能读到事务a的修改的数据

REATE TABLE `y` (
  `a` int(11) DEFAULT NULL,
  `b` int(11) DEFAULT NULL,
  `c` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

② 不可重复读:

当事务a和事务b同时打开,事务a插入了数据X,事务b查询不到X,当事务a提交了事务,事务b看到了数据X。 事务b两次查询不一致。

③) 幻读:

一次事务在前后两次查询的范围相同,后一次查询看到了前一次没有的行。

幻读主要在当前读的情况下产生的,

当前读: 读取的是最新版本的数据, 并且对读取的记录加锁, 阻塞其他事务同时改动相同记录,避免出现安全问题。

 怎么理解了?

上面普通的select * from y; 就是快照读,

下面的 select * from y lock in share mode; 就是当前读,读取的是最新的版本数据。

幻读就是像上面的情况,可能session B 提交前 添加一条数据的时候,

 如果上面不会阻塞的话,就会产生幻读。

为了解决幻读mysql并不是通过事务隔离级别serializble串行化来解决的。而是通过间隙锁 (Gap Lock)来解决的。 

三、 事务隔离级别的修改

通过变量tx_isolation来定义的。默认是RR的方式,也就是可重复的的隔离级别,如果要修改的话:

 set global tx_isolation = 'read-uncommitted'; ##读未提交

 set global tx_isolation = 'read-committed';     ##不可重复读

set global tx_isolation = 'repeatable-read';  ## 可重复读

set global tx_isolation = 'serializable'; ## 串行化

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值