美文网首页
数据库事务&并发异常&锁机制

数据库事务&并发异常&锁机制

作者: 瓢鳍小虾虎 | 来源:发表于2020-12-25 09:26 被阅读0次

数据库事务:操作数据库的一个程序单元,包含查看或者更新的一组操作。

数据库事务的特性:
1)原子性:事务的一组操作不可分割,要么同时成功,要么同时失败。
2)一致性:事务的操作结果使数据库从一个一致性状态变到另一个一致性状态。
3)隔离性:并发执行的事务不会相互影响。
4)持久性:事务对数据库的影响是持久的。

并发事务的异常:
1)丢失更新:事务覆盖了其他事务已经提交的修改,好像其他事务丢失了一样。
2)脏读:事务读到了其他事务未提交的更改。
3)不可重复读:一次事务两次读取一条数据的结果不一样,原因是并发事务在过程中执行完了一个修改过程。
4)幻读:一次事务两次读取的统计类结果不一样,原因是并发事务更改了需要被纳入统计的数据。

隔离级别:
读未提交(READ-UNCOMMITTED):所有的并发事务异常都会遇到
读已提交(READ-COMMITED):oracle数据库默认隔离级别,会遇到不可重复度或者幻读
不可重复读(REPEATABLE-READ):mysql数据库默认隔离级别,会遇到幻读
串行化(SERIALIZABLE):禁止了并发操作,不会遇到任何并发事务异常

关于丢失更新:特点是2个同时开启的事务,操作同样的查询结果,后提交或者后撤销的事务覆盖了之前提交的事务的结果。

丢失更新和其他3种并发事务异常比较:丢失更新是由周期较长的事务更新操作产生的;其他3种异常是由周期较短的事务提交产生的。

丢失更新分2种:
1)回滚更新丢失
2)覆盖丢失

第一种丢失是直接被数据库禁止的,我们通常只会遇到第二种丢失更新。
解决办法就是使用“锁机制”。锁机制分2种:悲观锁和乐观锁。

悲观锁:假设丢失更新会高概率发生则使用悲观锁,避免频繁更新出错。
悲观锁具体分2种:
共享锁:select * from account lock in share mode;
排它锁:select * from account for update;

乐观锁:假设丢失更新出现的概率低,可考虑使用乐观锁,以免锁的时间太长影响其他人操作。
实现方法:
1)在表中加入一个类型为timestamp的字段,并且设置成只要表插入或者更新操作就自动变为最新时间。
2)更新操作时先通timestamp字段检查当前查询结果是不是最新的版本。

常用的2种锁为排它锁和乐观锁。

mysql操作隔离级别相关命令:
查看数据库版本:select version();
查看数据库隔离级别:
select @@tx_isolation; // mysql 5.x
select @@session.transaction_isolation; // mysql 8.x
设置数据库隔离级别:
参数分别为READ-UNCOMMITTED,READ-COMMITED,REPEATABLE-READ,SERIALIZABLE
set @@tx_isolation=xxx; // mysql 5.x
set @@session.transaction_isolation=xxx; // mysql 8.x

事务相关命令:
start transaction;
commit;
rollback;

相关文章

  • 数据库事务&并发异常&锁机制

    数据库事务:操作数据库的一个程序单元,包含查看或者更新的一组操作。 数据库事务的特性:1)原子性:事务的一组操作不...

  • 锁机制

    锁机制 Innodb是事务级数据库,支持事务,支持外键,rollback,mvcc(高并发:在readcommit...

  • 第六章 锁(下)

    6.5 锁问题通过锁机制可以实现事务隔离性要求,使得事务可以并发地工作。锁提高了并发,但是却会带来潜在的问题。不过...

  • 面试问题记录(一) Day50 2019-01-09

    并发中的常用锁,乐观锁和悲观锁,实现及使用 事务的特性,原理,spring如何实现事务 spring的实现机制,I...

  • 数据库中的锁

    简介 在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数...

  • 09.深入理解乐观锁与悲观锁

    在数据库的锁机制中.数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据,不破坏事...

  • 转:深入理解乐观锁与悲观锁

    在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不...

  • 深入理解乐观锁与悲观锁

    在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不...

  • 深入理解乐观锁与悲观锁

    在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不...

  • 深入理解乐观锁与悲观锁

    在数据库的锁机制中介绍过,数据库管理系统(DBMS)中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不...

网友评论

      本文标题:数据库事务&并发异常&锁机制

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