作为dba,简述mysql 悲观锁与乐观锁 ?


MySQL中的悲观锁和乐观锁是两种处理数据库并发访问的方式,它们在处理数据并发修改时的策略有所不同。 1. 悲观锁(Pessimistic Locking): 悲观锁假设最坏的情况,即在数据被访问时总是假设其它的事务会尝试修改这份数据,因此在数据被访问时就会加锁,以避免数据的并发修改。在MySQL中,可以通过SELECT ... FOR UPDATE来实现悲观锁。当执行这个语句时,数据库会为被选中的每一行数据都加锁,其它事务尝试修改这些行的数据时都会被阻塞,直到这个锁被释放。 悲观锁的优点是实现简单,系统开销小。如果发生死锁(两个或以上的事务互相等待对方释放资源),解决死锁的代价可能会很大。 2. 乐观锁(Optimistic Locking): 乐观锁则正好相反,它假设数据通常情况下不会引发冲突,所以原本不会锁定数据。但在提交事务时会检查是否出现冲突。在MySQL中,可以通过UPDATE或DELETE操作来实现乐观锁。事务在执行UPDATE或DELETE操作时,会检查是否存在其它事务也在尝试修改被操作的数据。如果存在冲突,事务就会失败并回滚。 乐观锁的优点是不会出现死锁的情况,但是如果检查过程中发现冲突较多,可能会引发较多的回滚,影响性能。 这两种锁各有优缺点,具体使用哪种方式取决于具体的应用场景和需求。在写操作较多,冲突可能较大的场景中,可能更适合使用悲观锁;而在读操作较多,冲突可能较小的场景中,可能更适合使用乐观锁。 [2023-11-09 18:03:47 | AI写代码神器 | 341点数解答]
相关提问
- master.driver = com.mysql.jdbc.driver master.url = jdbc:mysql://10.9.1.210:3306/drdisplayv3_dev?usessl=false&useunicode=true&characterencoding=utf-8&zerodatetimebehavior=converttonull&transformedbitisboolean=true master.username = root master.password = root 副表配置 slave.driver = com.mysql.jdbc.driver slave.url = jdbc:mysql://localhost:3306/drdisplay?usessl=false&useunicode=true&characterencoding=utf-8&zerodatetimebehavior=converttonull&transformedbitisboolean=true slave.username = root slave.pas(92点数解答 | 2024-06-26 15:47:44)283
- master.driver = com.mysql.jdbc.driver master.url = jdbc:mysql://10.9.1.210:3306/drdisplayv3_dev?usessl=false&useunicode=true&characterencoding=utf-8&zerodatetimebehavior=converttonull&transformedbitisboolean=true master.username = root master.password = root 副表配置 slave.driver = com.mysql.jdbc.driver slave.url = jdbc:mysql://localhost:3306/drdisplay?usessl=false&useunicode=true&characterencoding=utf-8&zerodatetimebehavior=converttonull&transformedbitisboolean=true slave.username = root slave.pass(210点数解答 | 2024-06-26 15:49:53)262
- 作为**工程师,简述 loadrunner 分哪三部分?(145点数解答 | 2023-11-09 18:25:29)260
- 作为**工程师,简述 iphone全机型分辨率和尺寸 ?(360点数解答 | 2023-11-09 18:31:43)290
- 作为javascript开发,简述 html5 新特性 ?(97点数解答 | 2023-11-09 00:53:32)210
- 作为javascript开发,简述 angularjs 的数据双向绑定是怎么实现的?(333点数解答 | 2023-11-09 00:55:00)194
- 作为javascript开发,简述 javascript 盒子模型?(264点数解答 | 2023-11-09 00:57:12)408
- 作为javascript开发,简述 expires和cache-control?(268点数解答 | 2023-11-09 00:59:53)211
- 作为javascript开发,简述 javascript 中的高阶函数是什么?(266点数解答 | 2023-11-09 01:03:58)196
- 作为javascript开发,简述$(this) 和 this 关键字在 jquery 中有何不同?(435点数解答 | 2023-11-09 01:14:37)233
- 作为javascript开发,简述$(document).ready()方法和window.onload有什么区别?(271点数解答 | 2023-11-09 01:14:54)219
- 作为javascript开发,简述 jquery中 $ .get()提交和$.post()区别 ?(341点数解答 | 2023-11-09 01:15:01)228