mysql的innoDb引擎下的事务/事务的隔离级别/锁

在MySQL的众多存储引擎中,只有InnoDB支持事务,所有这里说的事务隔离级别指的是InnoDB下的事务隔离级别。

InnoDB引擎的锁机制:InnoDB支持事务,支持行锁和表锁用的比较多,Myisam不支持事务,只支持表锁。


事务:

一系列在共享数据库上执行的行为;事务的提出主要是为了解决并发情况下保持数据一致性的问题。

事务的特性:

原子性/隔离性/一致性/持久性

原子性:事务同时执行或者同时不执行;隔离性:事务之间不要影响;一致性:事务不能破坏关系数据的完整性以及业务逻辑上的一致性。持久性:在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中。


实现事务的隔离性之4种隔离级别:

隔离性:多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果;

这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。

并行时可能出现的问题:对同一个数据,比如商品的库存数量。

1.a写和回滚是一个事物:a写,b读,a回滚:脏读,解决:a写入和回滚之间,不允许别的读-read commit b只能读提交过的

2.a两次读是一个事务:a读,b写,a读:a两次读取不一样,不可重复读,解决:a不允许连续读,或者两次读之间不允许写入;

Repeated Read-解决2

3.a写和读是一个事务:a写,b写,a读:a认为没改过来,解决:a写入和读之间,不允许别的写入;

Serialization-解决一切,包括1.2

解决方案:不同的隔离级别:

4级最低级鸟用没有:Read Uncommitted:最低的隔离级别,什么都不需要做,一个事务可以读到另一个事务未提交的结果。所有的并发事务问题都会发生。

3级,解决了问题1:Read Committed:只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。

写的时候锁住对应的行,不让读。

2级解决了问题2:Repeated Read:在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。可以解决脏读、不可重复读。

锁,读的时候有索引,默认加锁方式是next-key锁;检索条件没有索引,更新数据会锁住整张表。一个间隙呗事务加了锁,其他事务是不可能在这个间隙插入记录的。

1级,解决了所有:Serialization:事务串行化执行,隔离级别最高,牺牲了系统的并发性。可以解决并发事务的所有问题。

读写都会锁住整个表。


然后是关于数据库的各种锁的总结:

1.共享锁(又称读锁)、排它锁(又称写锁):

InnoDB引擎的锁机制:InnoDB支持事务,支持行锁和表锁用的比较多,Myisam不支持事务,只支持表锁。

 

共享锁(S):允许一个事务去读一行,阻止其他事务获得相同数据集的排他锁。
排他锁(X):允许获得排他锁的事务更新数据,阻止其他事务取得相同数据集的共享读锁和排他写

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值