组态王授权产品id和授权锁id_十分钟读懂mysql隔离模式与锁

本文详细介绍了MySQL数据库的ACID特性和四种隔离级别,包括READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。通过实例演示了脏读、不可重复读和幻读的现象,并分析了死锁的产生原因及解决方法。强调在RR隔离级别下,使用非主键索引可能引发的并发问题和Gap锁导致的线上事故。
摘要由CSDN通过智能技术生成

mysql 数据库中一个事务具备ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。

而事务的隔离级别:

READ UNCOMMITTED(未提交读), READ COMMITTED(提交读), REPEATABLE READ(可重复读), SERIALIZABLE(可串行化)。f

这两者之间究竟该如何理解,化繁为简,一张表,三个字段梳理关系如下:

环境准备:

mysql 版本:10.3.8-MariaDB-1:10.3.8+maria~xenial-log

innodb模式

建表语句:

CREATE TABLE `test` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`c` int(11) NOT NULL DEFAULT '0',

`d` int(11) NOT NULL DEFAULT '0',

PRIMARY KEY (`id`),

KEY `idxcd` (`c`)

) ENGINE=InnoDB AUTO_INCREMENT=1 ;

id 主键,其他复合索引。

延长锁等待时间:set innodb_lock_wait_timeout=120;

取消自动提交:set autocommit = 0;

一、并发操作数据库的异常表现

a、脏读

1. 修改mysql 数据库的隔离模式为 READ UNCOMMITTED

set global transaction isolation level READ UNCOMMITTED ;

set session transaction isolation level READ UNCOMMITTED ;

2. 开启三个事务,分别执行

T1: update test set c = 51 where d = 10;

T2: update test set c = 52 where d = 10;

T3:update test set c = 53 where d = 10;

T1 事务中commit;然后查询select * from test where d = 10;

结果c = 52 或者 c =53。

这就是脏读,读取了其他事务并未提交的事务。

e00008d155aaad53993aab8e0b45a4f4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值