美文网首页
mysql的锁和事务隔离级别

mysql的锁和事务隔离级别

作者: 寒江_d764 | 来源:发表于2019-07-14 19:06 被阅读0次

一 锁的分类以及实现

1.1 锁概念

共享锁:共享锁加上了,只能读不能写,事务a和事务b都可以读数据,但是如果事务a加上锁,事务b

可以读,但是不能写,只有事务a可以写

排他锁:排他锁加上了,其他事务既不能读也不能写,会把加锁的所有数据锁上,比如事务a和事务b

事务a加上了行锁,事务a可以对加锁的数据进行读和写,但是事务b只能等待事务a commit完,事务a

释放掉锁,事务b才会读和写

行锁:语义上很容易理解,就是事务一行加锁,比如sql语句:

select * from merchent_order where id = 1 for update

因为id是主健,默认对id=1的数据进行加锁,锁住一行数据

表锁:锁整个表,比如sql语句:

select  * from merchant_order for update;

对整个表进行加锁。

悲观锁:比如mysql的for update,禁止其他事务进行读写操作,实际上在高并发场景下,对整个系统的吞吐性来讲,比较差,在数据很严格要求一致性的情况下,这种加锁方式有效,但是会牺牲系统的性能,所以一般在系统查询占比很多的情况下会加乐观锁,

乐观锁:加上版本号就可以实现乐观锁,类似java的CAS机制,具体实现sql:

update merchant_order set num = num+1 where version = ${version}

1.2 mysq事务隔离级别

读未提交:最低的事务隔离级别,事务a可以读取事务b提交的数据,可能出现脏读,幻读

读已提交:事务a可以读取事务b提交的数据,可能出现幻读,不允许任何中间状态出现,所以

不可能出现脏读,可能出现不可重复读。

备注:不可重复读(第一次和第二次读取的数据可能不一样),可重复读(第一次和第二次查询

的数据一致)

可重复读:多次同一个事务读取的事务是一样的,没有幻读出现,也没有脏读

串行化:读取的时候,默认加共享锁,等一个事务执行完,下一个事务才能开始执行,更新需要获取

排他锁,是最高的隔离级别

相关文章

  • MySQL相关(一)——— 事务和锁

    事务的隔离级别和锁机制 【1】InnoDB 事务隔离级别和锁 【2】脏读、不可重复读、幻读 mysql 相关 常用...

  • MYSQL事务

    常用语句 MYSQL事务,锁表 事务控制语句 事务的隔离级别 隔离级别描述产生风险READUNCOMMITTED ...

  • Mysql 隔离级别与锁的关系

    Innodb中的事务隔离级别和锁的关系MySQL加锁处理分析

  • Mysql 事务

    IBM MySQL 事务隔离级别和锁[https://developer.ibm.com/zh/articles/...

  • 收藏-MySQL

    # MySQL的并发控制与加锁分析# MySQL的四种事务隔离级别# mysql共享锁与排他锁

  • MySQL 事务隔离级别解析和实战

    MySQL 事务隔离级别解析和实战 1、MySQL 隔离界别查看 查看回话隔离级别 查看系统隔离级别 2、MySQ...

  • mysql事务隔离级别和锁

    事务的四种隔离级别 锁的使用注意点 1、未开启事务时,InnoDB默认为增/删/改开启事务(开启事务可以认为有对应...

  • 数据库事务和锁

    参考链接:MySQL中Innodb的事务隔离级别和锁的关系 1. 事务 事务:事务是作为单个逻辑单元工作执行的一些...

  • 聊聊MySQL的隔离级别

    原文:聊聊MySQL的隔离级别 | MySQL隔离级别原理参考:oracle - mysql - 数据库事务隔离级...

  • mysql的锁和事务隔离级别

    一 锁的分类以及实现 1.1 锁概念 共享锁:共享锁加上了,只能读不能写,事务a和事务b都可以读数据,但是如果事务...

网友评论

      本文标题:mysql的锁和事务隔离级别

      本文链接:https://www.haomeiwen.com/subject/qcxikctx.html