日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

传智播客JavaWeb day11--事务的概念、事务的ACID、数据库锁机制、

發布時間:2024/4/17 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传智播客JavaWeb day11--事务的概念、事务的ACID、数据库锁机制、 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 什么叫做事務?

2.默認情況下每一條sql語句都是一個事務,然后自動提交事務 ?ps:如果想多條語句占一個事務,則可以手動設置SetAutoCommit為false

3.關鍵字 start transaction;rollback;commit

  3.1 練習 創建account表(id,name,money),插入兩條數據(a,b);start transaction;set a+100,set b-100;commit rollback??

create table account( id int primary key auto_increment, name varchar(20), money double //在MySQL中沒有money類型 ); insert into account values(null,'a',1000),(null,'b',1000) start transaction update account set money = money -100 where name='a'; update account set money = money +100 where name='b'; commit; View Code

4.jdbc中事務管理

5. 設置回滾點

6.事務的四大特性(ACID)

總結:這一節主要講了事務的概念;jdbc中使用事務;事務的四大特性


二、隔離性

? 事務的四大特性,前三點數據庫能很好的幫我實現,我們重點來談下隔離性。

ps:如果用單線程來實現隔離性的話(也就是用lock的方式),會降低數據庫的性能和效率

1.不考慮隔離性可能造成的問題 ps:我們只要考慮這三個方面的問題兩個人同時修改,兩個人同時讀,一讀一改,這三種情況都考慮到了那么所有的問題都考慮到了

  1.1 兩個人同時修改

    用lock來解決兩個人同時修改的線程安全問題

  1.2 兩個人同時讀

    兩個人同時讀不存在線程安全問題

  1.3 一讀一改 ?ps:一讀一改會出現三個問題:臟讀、不可重復讀、虛讀

    1.3.1 臟讀

       ? 臟讀就是讀到了其他事務沒有提交的數據 ?ps:比如a(淘寶買家)、b(淘寶賣家),a開啟事務向b打了100塊錢但是事務還未提交然后告訴b說我已經向你支付了100請你發貨,這個時候b去賬戶查了一下果然多了100塊于是給a發了貨,但是這個時候a做了rollback操作,結果b虧了100錢的貨(事務舉例常用銀行轉賬跟購物)

b賣家進行的操作: select @@tx_isolation; set transaction isolation level read uncommitted; start transaction; //b一直在等待a付款,當a付款后告訴b發貨時b去查了一下自己的賬號 select * from account where name='b'; //這個時候b發現自己的賬戶中確實多了100快,當時萬萬沒有想到此時a做了rollback的操作 a買家進行的操作: start transaction; update account set money = money -100 where name='a'; update account set money = money +100 where name ='b'; //這個時候a告訴賣家b說我已經給你打款了,你趕快給我發貨吧 //當b發貨之后a做了rollback的操作 rollback; View Code

    1.3.2 不可重復讀?

        在同一個事務中多次讀取的結果不一樣,原因就是有人修改了數據 ?ps:舉例,銀行工作人員報表統計

b賣家進行的操作:(b開始的) select @@tx_isolation; set transaction isolation level read uncommitted; //一開始b就在等待其他買家付款,所以一開始就開啟了一個事務查詢了自己的賬戶 start transaction; select * from account where name='b'; //這個時候查到的錢是1100,之后一直在等待買家a付款 …… //賣家b在接到買家a的付款通知之后查詢了下自己的賬戶 select * from account where name='b'; //這個時候得到的金額數為1200了這個時候就出現了同一個事務類查詢的結果不一樣了,也就是不可重復讀(在有些情況下這種不可重復是正確的) a買家進行的操作: //買家a向賣家b付了一百塊錢 start transaction; update account set money = money -100 where name='a'; update account set money = money +100 where name ='b'; commit; //買家a提交事務之后就通知賣家b View Code

    1.3.3 虛讀(幻讀)

       ? 一個事務讀取了別的事務插入的 數據,導致前后讀取不一致(讀到不存在的數據,所以叫虛讀)

b銀行業務員進行的操作:(b開始的) select @@tx_isolation; set transaction isolation level read uncommitted; //一開始b就開啟一個事務,統計開戶總數 start transaction; select count(*) from account; //這個時候查到的個數是2,正在這個時候用戶a在銀行開一新戶 …… select count(*) from account; ////這個時候查到的個數是3,這個時候就出現了幻讀虛讀,讀取了其他事務新插入的數據 a用戶進行的操作: //用戶a開戶 start transaction; insert into account values(null,'c',1300); commit; //用戶a開了戶之后,業務員b又做了一次統計 View Code

2.數據庫的四大隔離級別(read uncommitted、read committed、repeateable read、serializable)

  2.1 read uncommitted ?不防止任何隔離性的問題(臟讀、不可重復讀、虛讀的問題都存在)

  2.2 read committed ?能防止臟讀,但是不能防止不可以重復讀和虛讀

  2.3 repeatable read 能臟讀、不可重復讀,但是不能防止虛讀

  2.4 serializable 能防臟讀、不可重復讀、虛讀,但是效率是最低的

  2.5 補充

    2.5.1 查詢數據庫的隔離級別 ? select @@tx_isolation

    2.5.2 設置數據庫的隔離級別 ?set [global/session] transaction isolaiton level ?XXX 不加global和session的話指修改客戶端的隔離級別

    2.5.3 個人對隔離性的理解 ? PS:其實就是利用鎖機制控制我在進行事務的時候你能做什么操作(讀、寫、修改、插入crud)

       ? ?開啟一個事務就好像復制了一份數據,該事務設置的隔離級別就是該數據被其他事務影響的程度。read uncommitted 則其他事務為提交的事務也能影響到改數據,read committed 則是提交后的數據能影響到,repeatable read 則未提交和已經提交的修改數據都不能影響到該數據但是新插入的數據可以影響到,serializable則該數據不受任何的影響


三、數據庫中的鎖機制

1.共享鎖:在非serializable隔離i級別下做查詢不加任何鎖,而在serializable隔離級別下做查詢加共享鎖

  1.1 共享鎖的特點:共享鎖可以與共享鎖共存,共享鎖不能排他鎖共存

2. 排他鎖:在所有隔離級別下做修改都會加排他鎖

  2.1 排他鎖和其他任何鎖都不能共存

3.補充

  3.1 sql語句的執行順序

    from where select group by having order by

  3.2 用sql語句選出每個科目成績最好的

    select max(socre) from t_score group by subject ?ps:按照sql語句的執行順序先from表在內存中有一段數據塊然后根據subject分組,摞成一小堆(在數據庫查詢的時候我們只能看到最上面那個),然后我們再在一摞摞的小組中選出分數最大的

  3.3 選出各個科目成績前兩名的學生 問題拆分:先選出一門具體學科成績的前兩名;各個學科相當于條件擴大到了所有學科如select top 2 from score where subject in(select subject from score )


?四、更新丟失問題

1.問題描述:不同的用戶,基于相同的查詢結果,更新時(多個線程)出現覆蓋的問題


?

轉載于:https://www.cnblogs.com/lihongchen/p/4476751.html

總結

以上是生活随笔為你收集整理的传智播客JavaWeb day11--事务的概念、事务的ACID、数据库锁机制、的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产91丝袜在线播放九色 | 69式视频| 精品国产露脸精彩对白 | 丰满熟女一区二区三区 | 精品在线视频播放 | 欧美韩日精品 | 中文字幕精品一区二区三区精品 | 人人爱av| 少妇精品久久久一区二区三区 | 无码久久精品国产亚洲av影片 | 精品伊人久久 | 91射区| 91极品视觉盛宴 | 成人av动漫在线观看 | 96av在线| 老熟妇高潮一区二区三区 | 一区二区三区四区免费观看 | 国产999视频| 国产在线视频自拍 | 永久精品视频 | 成人在线h| 亚洲国产高清视频 | 色婷亚洲| 377p粉嫩大胆色噜噜噜 | 欧美日韩一区二区区别是什么 | 波多野结衣av电影 | 人妻精品无码一区二区三区 | 亚洲男人天堂视频 | 狠狠操亚洲 | ass日本 | 天天看黄色片 | 日本免费电影一区二区三区 | 床戏高潮做进去大尺度视频网站 | 超碰人人干人人 | 99热超碰| 永久免费av网站 | 俺来也av | 老女人综合网 | 曰批视频在线观看 | 久久国| 性欧美精品中出 | 中文字幕免费在线观看 | 欧美日韩三级在线观看 | 亚洲综合在线观看视频 | 亚洲av无码一区二区三区在线观看 | 免费网站在线观看人数在哪动漫 | 日韩欧美国产一区二区 | 日韩欧美成 | 麻豆91视频 | 国产精品国产精品 | xxx老太太| 人人天天夜夜 | 人人草人人| 亚洲av无码国产精品久久 | 国产亚洲欧美一区二区三区 | 91麻豆映画传媒 | 一级网站在线观看 | japanese21ⅹxx日本| 日本xxxwww | av色图| 91久久久久久久久久 | 韩国中文字幕hd久久精品 | jizz日本大全 | 芭乐视频色 | 亚洲精品乱码 | 啪视频网站 | 黄色av观看 | 亚洲精品高潮 | 婷婷亚洲五月色综合 | 天天躁日日躁aaaxxⅹ | 欧美做受xxxxxⅹ性视频 | 97色伦影院 | 日本久久久网站 | 999精品在线视频 | 成人黄色av网站 | 色视频一区 | 特大黑人娇小亚洲女mp4 | 在线视频播放大全 | 国产精品无码久久久久一区二区 | 欧美影院在线 | 国产精品中文字幕在线观看 | 国产精品日韩一区二区 | www.av777 | 人妻妺妺窝人体色www聚色窝 | 免费在线成人 | 丰满大肥婆肥奶大屁股 | 中国在线观看免费高清视频播放 | 亚洲a在线观看 | 色综合av综合无码综合网站 | 免费一区二区三区 | 欧美12--15处交性娇小 | 97在线观视频免费观看 | 天天色棕合合合合合合合 | 中文字幕在线亚洲 | 91看大片| 在线观看免费高清 | 国产欧美日韩综合精品一区二区三区 | 337p日本欧洲亚洲鲁鲁 | 一区二区三区精品免费视频 |