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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java之MySQL事务处理

發布時間:2024/3/12 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java之MySQL事务处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廢話不多說,直接看圖:

上面就是一個簡單的事務流程 ,其實呢,在我們平時操作的MySQL語句都涉及到了事務處理,每一條語句都是一個事務,mysql客戶端默認是開啟了自動提交事務,可以這樣查看:

上面1就是開啟自動提交事務,當我們提交sql語句的時候,mysql就自動幫我們commit了。我們可以馬上就會查看到相應的結果。

我們可以關閉上面的自動提交事務,可以如下設置:

0就代表關閉了自動提交。

那么我們展示一下,關閉了自動提交之后,語句會怎么處理,說一下,你要看MySQL語句執行之后的處理情況,就必須通過兩個客戶端操作才能看到處理情況,一個客戶端語句處理,一個展示,不要在一個客戶端展示效果。

關閉自動提交之后:

先在一個客戶端看一下這張表的原始情況,然后我們在執行一下操作:

我們把這里是想把李四的錢 - 500變成和張三一樣。

上面操作執行了,從另外一個客戶端查看表的數據情況:

?

看吧,數據好像沒有改變,原因在于我們沒有commit數據。

我們從操作客戶端提交一下數據:

?

然后在從另外一個客戶端查看數據情況:

?

上面數據就改過來了,也就是說,當沒有設置自動提交事務,每一條語句我們就只能手動提交。

?下面說一下事務處理原理:

?下面說一下這個回滾點的操作:

回滾:一聽就是回到相應的位置

你自己設置一個相應的位置設置回滾點就行,自己定義

下面說一下事務的隔離級別:

?

在我們程序運行的過程中,用戶對數據庫的訪問都是并發的,也就是說,會出現多個用戶訪問同一個數據的問題,簡單說就是,會出現多個事務之間相互干擾的問題:

下面說一下mysql的四種隔離級別:

?

?下面說一下隔離級別的相關命令:

比如我們查看當下客戶端事務的隔離級別:

很明顯是不是可重復讀。

同樣我們可以設置事務的隔離級別:

?

設置之后,必須重新啟動客戶端:

?

?下面我們展示一下臟讀的問題,這都是并發造成的問題,多個用戶訪問同一個數據,事務隔離級別低:

先把事務隔離性設置為read uncommitted,設置方法如上,讀未提交,這樣才會產生臟讀問題:

我們先來看一下全是數據表的數據:

既然是多個用戶來操作數據,那么我們建立兩個客戶端:

兩個窗口都開啟事務:

?我們在左邊這個窗口更新一下數據,一個賬戶加500,一個賬戶減500,未提交:

?

然后在右邊的窗口查詢一下賬戶:

?

和明顯,讀取到了另外一個事務未提交的數據,應該就是從臨時日志取出來的。

然后把左邊窗口回滾一下:

右邊窗口錢就沒了:

?

?上面就明顯看到數據安全性非常不高,比如右邊向左邊支付500,左邊一看錢到了,然后右邊一rollback,左邊錢就沒了。

解決臟讀問題很簡單:提升安全級別,只有讀未提交才產生臟讀,比如改成讀已提交

來說一下,不可重復讀演示,演示不可重復讀,必須把事務隔離級別設置成read committed

不可重復讀:一個事務中,兩次讀取的內容是不一樣的。

開啟兩個窗口,還是把事務打開.

我們來看一下原始數據:

還是在左邊的窗口更新數據,注意把數據提交

?

右邊的窗口 查詢一下:

這個時候,就會出現數據讀取不一致的問題。

如何解決不可重復讀的問題,就隔離級別提升為repeatable read

?同一個事務中,要保證數據一致性,必須使用repeatable read級別來讀取數據。

下面簡單說一下幻讀:

使用serializable隔離級別,就會阻止幻讀的產生,開啟了seriable隔離級別,一個事務就會等待另外一個事務commit之后才會執行當前操作。

?

總結

以上是生活随笔為你收集整理的java之MySQL事务处理的全部內容,希望文章能夠幫你解決所遇到的問題。

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