前言
  • 数据库是一个共享资源,为了充分利用数据库资源,发挥数据

    库共享资源的特点,应该允许多个用户并行地存取数据库。但这样就会产生多个用户程序并

    发存取同一数据的情况,为了避免破坏一致性,所以必须提供并发控制机制。

  • 并发控制是以事务(transaction)为单位进行的。

什么时候表锁什么时候行锁?
  • 行锁是指的innodb引擎,只有通过索引条件检索数据,InnoDB才会使用行级锁,否则,InnoDB将使用表锁。
查看表锁
#查看是否有锁表的情况
show OPEN TABLES where In_use > 0; #拼接hyq用户的kill语句,谨慎执行。
select concat('KILL ',id,';') from
information_schema.processlist where user='hyq'; #查看当前的事务
SELECT * FROM information_schema.innodb_trx;
#查看当前锁定的事务
SELECT * FROM information_schema.innodb_locks;
#查看当前等锁的事务
SELECT * FROM information_schema.innodb_lock_waits;
查看行锁
SHOW STATUS LIKE 'innodb_row_lock%';
四种事务隔离级别
  • 一个事务对某个数据对象加锁后究竞拥有什么样控制是由封锁类型决定的,基本的锁有两种,排它锁(写锁、X锁),共享锁(读锁、S锁)。两者的相容关系如下:

例子:

未提交读(Read uncommitted)
  • 未提交读是数据库事务隔离级别中最低的一种,在这种级别下,一个事务会读到另一个事务更新后但未提交的数据,如果事务1 rollback后,那么事务2读取的数据就是脏数据,简称脏读。

已提交读(Read Committed)
  • 只能读取到已经提交的数据。在事务1内,多次读同一数据,在这个事务还没有结束时,如果事务2恰好修改了这个数据,那么,在事务1中,两次读取的数据就可能不一致。也就是说的不可重复读的问题。如下:

可重复读(Repeated Read)
  • 可重复读就是多次读取的结果都一直,而不可重复读是指,在一个事务内,多次读同一数据,在这个事务还没有结束时,如果另一个事务恰好修改了这个数据,那么,在第一个事务中,两次读取的数据就可能不一致。在这种情况下可能会遇到幻读的问题如下:

可串行化(Serializable )
  • 可串行性是并行调度正确性的唯一准则,所有事务按照次序依次执行,因此,脏读、不可重复读、幻读都不会出现。

    为保证并行调度可串行性而提供的封锁协议。因此我们可以得出如下结论:这个事务级别的,其并行执行的结果一定是正确的,但是呢,由于串行执行,大大降低了并行度,所以一般不使用它。

欢迎来公众号【侠梦的开发笔记】 一起交流进步

最新文章

  1. C++中的显式类型转化
  2. javascript曲线图和面积图Line & Area chart控件功能及下载
  3. Python 练习
  4. VSS记住用户名和密码
  5. java内存泄漏
  6. spring定时器(一)
  7. poj 3667 Hotel(线段树,区间合并)
  8. KindEditor图片批量上传
  9. 用python matplotlib 画图
  10. python数据分析之pandas库的Series应用
  11. QQ互发消息
  12. Mac下开发常用目录
  13. (转)委托的N种写法,你喜欢哪种?
  14. 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处
  15. 初探JavaScript魅力(五)
  16. es6中对象的类与继承方法
  17. Codeforces Round #424 Div2 E. Cards Sorting
  18. 【同余方程组】POJ1006 生理周期
  19. postman(十一):添加cookie
  20. 第4周小组作业:WordCount优化

热门文章

  1. 枚举在switch中的运用
  2. 2019-8-31-cmd-如何跨驱动器移动文件夹
  3. PHP笔试题(11道题)详解
  4. 从零学React Native之02状态机
  5. 使用DataX同步MaxCompute数据到TableStore(原OTS)优化指南
  6. day6_python之json序列化和反序列化
  7. 1、Dapper介绍
  8. spring mvc表单form值自动传到javabean-注解@ModelAttribute
  9. Python--day69--ORM聚合查询和分组查询
  10. 2019-9-2-git-需要知道的1000个问题