Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

数据库事务和锁机制 PDF 下载


分享到:
时间:2020-11-15 07:59来源:http://www.java1234.com 作者:转载  侵权举报
数据库事务和锁机制 PDF 下载
失效链接处理
 数据库事务和锁机制   PDF 下载


 
本站整理下载:
提取码:v7ag 
 
 
相关截图:
 
主要内容:


事务:保护数据库数据可靠交易的安全机制
事务特性ACID:
1)原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。 
2)一致性(Consistency)一个事务中,事务前后数据的完整性必须保持一致。
3)隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
4)持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变 就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
并发访问问题----由隔离性引起
1)脏读:B事务读取到了A事务尚未提交的数据   ------  要求B事务要读取A事务提交的数据
2)不可重复读:一个事务中两次读取的数据的内容不一致  ----- 要求的是一个事务中多次读取时数据是一致的  --- update
3)幻读/虚读:一个事务中 两次读取的数据的数量不一致  ----- 要求在一个事务多次读取的数据的数量是一致的 --insert  delete
事务的隔离级别
1)read uncommitted : 读未提交 :最低级别,任何情况都无法保证。
2)read committed:读已提交 :可避免脏读的发生。 ---- oracle、sql server默认
3)repeatable read:可重复读:可避免脏读、不可重复读的发生。 ---mysql默认的
4)serializable:串行化:可避免脏读、不可重复读、幻读的发生---相当于锁表
在MySQL数据库中查看当前事务的隔离级别:
select @@tx_isolation;
设置事务的隔离级别:
set tx_isolation=’隔离级别名称’;
四个级别分别是:read-uncommitted  read-committed  repeatable-read
              serializable
mysql的锁机制
1.悲观锁
悲观锁就是在操作数据时,认为此操作会出现数据冲突,所以在进行每次操作时都要通过获取锁才能进行对相同数据的操作,这点跟java中的synchronized很相似,所以悲观锁需要耗费较多的时间.
1.1排它锁
   数据库的增删改操作默认都会加排他锁,而查询不会加任何锁。
   排他锁:对某一资源加排他锁后,自身可以进行增删改查,其他人无法进行任何操作。
   为select添加排它锁,语法为:
   select * from goods_lock where id=1 for update ;
   加上for update该查询语句假设执行了10秒钟,那么这10秒钟内其他人不能操作被锁  
   定的id为1的这条记录,增删改查,均不行,只能等查询结束后对该条记录添加的排它锁释
   放后才可以操作.  
   注:oracle排它锁是:for update no  wait;
1.2共享锁
   数据库的增删改操作默认都会加排他锁,而查询不会加任何锁
   共享锁:对某一资源加共享锁,自身可以读该资源,其他人也可以读该资源, 但无法修改。
   要想修改就必须等所有共享锁都释放完之后。
   为select添加共享锁,语法为:
   select * from goods_lock where id=1 lock in share mode;
   加上lock in share mode该查询语句如果执行了10秒钟,那么这10秒钟内其他人也可
   以查询该上锁的id为1的记录,但是不能进行修改,只能等查询结束后对该条记录设置的
   共享锁释放后才可以操作.
排它锁案例:有两条以上线程访问了数据库同一资源
T1: select * from goods_lock where id=1 for update ;
T2: update goods_lock set num=num-1 where id=1;

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐