作者:mrkly_825 | 来源:互联网 | 2023-09-04 10:48
推荐阅读
- 学习笔记 《 深入理解 Java 虚拟机》
- 学习笔记 《 后端架构设计》
- 学习笔记 《 Java 基础知识进阶》
- 学习笔记 《 Nginx 学习笔记》
- 学习笔记 《 前端开发杂记》
- 学习笔记 《 设计模式学习笔记》
- 学习笔记 《 DevOps 最佳实践指南》
- 学习笔记 《 Netty 入门与实战》
- 学习笔记 《 高性能MYSQL》
- 学习笔记 《 JavaEE 常用框架》
- 学习笔记 《 Java 并发编程学习笔记》
- 学习笔记 《 分布式系统》
- 学习笔记 《 数据结构与算法》
锁在InnoDB 存储引擎中锁的重要举足轻重,他保证了在并发情况下临界资源的数据完整性和数据一致性。但有的时候错误的或者不合理的使用锁也会造成一些问题,本文将详细的阐述在锁的使用过程中可能出现的问题。
1、隔离级别(Isolation Level)
首先需要了解的是,在DBMS中定义了四种 事务的隔离级别(Transaction isolation) 分别是: 读未提交(Read Uncommitted)
、读已提交(Read Committed)
、可重复读(Repeatable Read)
、串行化(Serializable)
。
这四种隔离界别都能解决一定的问题事务问题,如读已提交解决了脏读的问题,但没有解决不可重复读的问题,可重复读解决了脏读以及不可重复读的问题,但没有解决幻读的问题;串行化则解决了所有问题,但是其性能降低。
CREATE TABLE test
(
`id` BIGINT NOT NULL PRIMARY KEY COMMENT 'ID',
`name` VARCHAR(128) NOT NULL COMMENT 'NAME'
) ENGINE = InnoDB;
1.1 脏读
脏读,是最简单的问题,所谓的脏读就是读取到脏数据。即事务A读取到事务B未提交的数据,而后续事务B可能提交事务,也有可能回滚事务,脏读是最严重的问题。
-- 查询事务超时时间
mysql root@localhost:test> show variables like 'innodb_lock_wait_timeout';
+
| Variable_name | Value |
+
| innodb_lock_wait_timeout | 50 |
+
1 row in set
Time: 0.067s
mysql root@localhost:test> show variables like 'innodb_rollback_on_timeout';
+
| Variable_name | Value |
+
| innodb_rollback_on_timeout | OFF |
+
1 row in set
Time: 0.015s
3、死锁
同其他语言一样,死锁是两个事务互相等待对方释放资源,解决MySQL死锁的问题是事务超时,当出现死锁的时候,权重比较低的事务进行回滚,权重较高的事务得以继续执行。检测死锁除了超时机制还有等待图是检查是否存在死锁,这里不做深入讨论,感兴趣的读者可以查阅一下资料。
var cpro_id = "u6885494";