设为首页 加入收藏

TOP

数据库锁相关(四)
2019-09-17 18:40:01 】 浏览:79
Tags:数据库 相关
将两个事务的sql顺序调整为一致,也能避免死锁。
  • 2)大事务拆小。大事务更倾向于死锁,如果业务允许,将大事务拆小。
  • 3)在同一个事务中,尽可能做到一次锁定所需要的所有资源,减少死锁概率。
  • 4)降低隔离级别。如果业务允许,将隔离级别调低也是较好的选择,比如将隔离级别从RR调整为RC,可以避免掉很多因为gap锁造成的死锁。
  • 5)为表添加合理的索引。可以看到如果不走索引将会为表的每一行记录添加上锁,死锁的概率大大增大。
  • 总结

    本文介绍了MySQL数据锁以及事务的一些知识点,下面我们来总结一下;

    不同的存储引擎支持的锁的力度也不一样:

    • InnoDB:表锁行锁都支持(也做了演示);
      • 当查询走的索引的时候,这个时候锁的就是行;
      • 当查询没走的索引的时候,这个时候锁的就是表;
    • MyISAM:只支持表锁;

    数据库锁从锁的粒度我们可以分为两大类,它们各自的特点如下::

    • 表锁:开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度低;
    • 行锁:开销大,加锁慢;会出现死锁;锁定力度小,发生锁冲突的概率低,并发度高;

    悲观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据;

    乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据;

    最后

    最后说一下,本文的参考文章:数据库的两大神器

    大家可以去看一下原文,本人也是小菜鸡一枚,说的有问题还望大家指出来;

    大家共同学习,一起进步。

    首页 上一页 1 2 3 4 下一页 尾页 4/4/4
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇mysql 导出数据报错: row must b.. 下一篇oracle学习笔记(五) SQL操作符

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目