MySQL锁和事务

表锁

开销小,加锁快,锁定粒度大,并发度最低,偏向myiasm存储引擎,发生锁的概率最高。innodb支持表锁和行锁,而且默认创建隐藏的主键索引;
意向共享锁IS: 通知数据库接下来需要施加什么锁并对表加锁。如果需要对记录A加共享锁,那么此时innodb会先找到这张表,对该表加意向共享锁之后,再对记录A添加共享锁。
意向排它锁IX: 通知数据库接下来需要施加什么锁并对表加锁。如果需要对记录A加排它锁,那么此时innodb会先找到这张表,对该加意向排它锁之后,再对记录A添加排它锁

行锁

开销大,加锁慢,会出现死锁,锁定粒度小,并发度高,偏向innodb存储引擎,发生锁的概率最低;
排它锁(X写锁): 当A事务的操作未完成时候,其他事务可以读取但是不能写入或更新。直到A释放锁(kill,unlock)。在操作DML语句默认加上X锁,也可以手动for update(悲观锁)加上。
共享锁(S读锁): 若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。简单来说就是可以查看数据但不能修改和删除数据的一种锁,多个事务可以同时拥有

事务的四大特性

原子性(Atomicity): 所有语句作为一个单元全部执行成功或者全部取消,不能出现中间状态
一致性(Consistency): 如果数据库在事务开始时处于一致状态,则在执行该事务期间保留一致状态 。
隔离性(Isolation): 一个事务在它最终提交之前,对其他事务是不可见的。事务之间不能相互影响。
持久性(Durability): 事务提交后,所做的所有更改都会准确地记录在数据中并且不会丢失。

事务的隔离级别

RU(read-uncommitted): 读未提交,可能出现脏读(事务A读取了事务B已修改但尚未提交的数据,如果B事务回滚,则A读取的数据无效),不符合一致性。脏读可能,不可重复读可能,幻读可能

RC(read-committed): 读已提交,可能出现幻读(事务A读取到了事务B已经提交的修改的数据)不可重复读(一个事务读取到其他事务已经提交的数据,一般是由于update/delete造成的)。脏读不可能,不可重复读可能,幻读可能

RR(repeatable-read): 可重复读(一个事务读取到其他事务插入的数据(无论其它事务是否提交了数据,该事务中的数据始终不受其它事务的影响 ),一般由于insert造成的),MySQL默认的隔离级别(select @@global.tx_isolation;)。功能是防止"幻读"现象,使用的是undo的快照技术+GAP(间隙锁)+NextLock(下键锁)。

SR(serializable): 可串行化。可以防止死锁,但是并发事务性能差(事务挨个执行)。脏读、不可重复读、幻读不可能。

transaction_isolation=read-uncommitted
transaction_isolation=read-committed
transaction_isolation=REPEATABLE-READ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值