欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報激活碼778899分享:Mysql中的事務

柚子快報激活碼778899分享:Mysql中的事務

http://yzkb.51969.com/

目錄:?

一:事務的ACID特性及為什么要使用事務?

二:如何使用事務

三:事務的隔離級別

一:事務的ACID特性及為什么要使用事務?:

?1.事務的ACID特性:

事務的ACID特性指的是 Atomicity (原子性), Consistency (一致性), Isolation (隔離

性)和 Durability (持久性)。?

原子性:支持事務的數(shù)據(jù)庫中最基本的特性,一組SQL語句要么全部成功,要么全部失敗,不會出現(xiàn)只執(zhí)行了?半的情況,如果事務在執(zhí)行過程中發(fā)生錯誤,會回滾( Rollback )到事務開始前的狀態(tài)

,就像這個事務從來沒有執(zhí)行過?樣;

一致性:事務執(zhí)行完成后,保證數(shù)據(jù)正確并且符合預期?

?

隔離

性:多個事務之間不能相互影響?

持久性:事務一但提交就要保存到存儲介質(zhì)中(磁盤),不論數(shù)據(jù)庫是否損壞,都不會丟失數(shù)據(jù)

?

總結(jié):原子性,隔離性,持久性,共同作用實現(xiàn)一致性

2.為什么要使用事務:

事務具備的ACID特性,是我們使用事務的原因,在我們?nèi)粘5臉I(yè)務場景中有?量的需求要?事務來保證。支持事務的數(shù)據(jù)庫能夠簡化我們的編程模型, 不需要我們?nèi)タ紤]各種各樣的潛在錯誤和并發(fā)問題,在使?事務過程中,要么提交,要么回滾,不?去考慮?絡異常,服務器宕機等其他因素,因此我們經(jīng)常接觸的事務本質(zhì)上是數(shù)據(jù)庫對 ACID 模型的?個實現(xiàn),是為應用層服務的。?

因此在使用數(shù)據(jù)庫過程中,對于修改只要提交成功,數(shù)據(jù)就可以安全的保存,只要回滾就可以回到,保存點事務之初

二:如何使用事務:

1.查看支持事務的存儲引擎:在MySQL中支持事務的存儲引擎是InnoDB,可以通過

show engines;?

?

2.語法:

開始?個新的事務:start? transaction 或者 begin;

提交當前事務,并對更改持久化保存:commit;

回滾當前事務,取消其更改:rollback;?

??

例子1:開啟事務,執(zhí)行修改后回滾

1.開啟,并把張三和李四的balance字段分別加100和減100

回滾:數(shù)據(jù)回到初始狀態(tài)。

?例子2:開啟一個事務,執(zhí)行修改后提:

再查詢發(fā)現(xiàn)數(shù)據(jù)已被修改,說明數(shù)據(jù)已經(jīng)持久化到磁盤

?

?

3.設置保存點:??

語法:SAVEPOINT + 保持點名字;?

例子:張三李四分別修改了兩次,設置了兩個保存點,然后插入了一條數(shù)據(jù)

??

修改后:

?

?

回滾第二個保存點:

?

?

?

回滾到第一個保存點:?

?

?

?

回滾時不指定保存點,直接回滾到事務開始時的原始狀態(tài),事務關閉:?

?

?

?

?

4.提交事務:

默認情況下,MySQL是自動提交事務的,也就是說我們執(zhí)行的每個修改操作,比如插入、更新和刪除,都會自動開啟一個事務并在語句執(zhí)行完成之后自動提交,發(fā)生異常時自動回滾。?

?

查看當前事務是否?動提交可以使用:

show variables like 'autocommit';

?

??

?

通過以下語句設置事務為自動或手動提交:

# 設置事務?動提交

mysql> SET AUTOCOMMIT=1; # ?式?

mysql> SET AUTOCOMMIT=ON; # ?式?

# 設置事務?動提交

mysql> SET AUTOCOMMIT=0; # ?式?

mysql> SET AUTOCOMMIT=OFF; # ?式?

注意:

只要使? START TRANSACTION 或 BEGIN 開啟事務,必須要通過 COMMIT 提交才會持久

化,與是否設置 SET autocommit ?關。(總結(jié):開啟事務落盤必須提交)?

?

?三:事務的隔離級別:

1.什么是隔離級性:

MySQL服務可以同時被多個客戶端訪問,每個客戶端執(zhí)行的DML語句以事務為基本單位,那么不同的客戶端在對同?張表中的同?條數(shù)據(jù)進行修改的時候就可能出現(xiàn)相互影響的情況,為了保證不同的事務之間在執(zhí)行的過程中不受影響,那么事務之間就需要要相互隔離,這種特性就是隔離性。?

?

?

2.隔離級別:

事務間不同程度的隔離,稱為事務的隔離級別;不同的隔離級別在性能和安全方面做了取舍,有的隔離級別注重并發(fā)性,有的注重安全性,有的則是并發(fā)和安全適中;在MySQL的InnoDB引擎中事務的隔離級別有四種:

??

(1).?

READ UNCOMMITTED ,讀未提交?

(2).?

READ COMMITTED ,讀已提交

(3).?

REPEATABLE READ ,可重復讀(默認)

(4).?

SERIALIZABLE ,串行化?

?

注意:從上到下安全性逐漸升高,從下到上性能性逐漸升高

?

?

?

(1).?

READ UNCOMMITTED ,讀未提交

解釋:?

對應事務中,事務A對事務進行修改,但是事務B訪問了事務A未提交的數(shù)據(jù),這個情況叫做

臟讀

,

事務B讀到的是事務A回滾的數(shù)據(jù)??

例子:

??

(2).?

READ COMMITTED ,讀已提交

解釋

:?

事務A第一次查詢了某條記錄,事務B進行了修改并且提交,事務A再次查詢這條記錄發(fā)現(xiàn)與第一次

查詢結(jié)果不一致

,這種現(xiàn)象叫做

不可重復讀

(多次讀取到的結(jié)果不一致)??

例子:?

?

(3).?

REPEATABLE READ ,可重復讀(默認):?

?

事務A第一次查詢到的結(jié)果集,第二次以相同方式查詢到的結(jié)果集,與第一次的

結(jié)果集不一致

,這種現(xiàn)象叫做

幻讀??

?

注意:Mysql Innodb引擎使用了間隙鎖(next-key)鎖住了目標行和之前的信息,解決了部分幻讀問題

(MySQL中的間隙鎖(Gap Lock)是一種針對InnoDB存儲引擎的鎖定機制,用于鎖定一個范圍,但不包括記錄本身,主要用于防止幻讀。

間隙鎖只在可重復讀(REPEATABLE READ)事務隔離級別下工作。

)?

?

?例子:?

(4).?

SERIALIZABLE ,串行化?

:解決了所有數(shù)據(jù)安全問題,所有事務都是一個挨一個執(zhí)行,一個事務必須等到上一個事務執(zhí)行完成才可以執(zhí)行,解決了所有并發(fā)安全問題。?

?

?

??

3.查看和設置隔離級別:

這里注意Mysql事務隔離級別默認是,可重復讀(

REPEATABLE READ

) ;

兩個@@是表示查看系統(tǒng)變量。?

?

3.1.查看:

?

# 全局作?域

SELECT @@GLOBAL.transaction_isolation;

# 會話作?域

SELECT @@SESSION.transaction_isolation;

# 可以看到默認的事務隔離級別是REPEATABLE-READ(可重復讀)

?

?

?

?

?

3.2.設置:?

?

柚子快報激活碼778899分享:Mysql中的事務

http://yzkb.51969.com/

參考閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權,聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19560689.html

發(fā)布評論

您暫未設置收款碼

請在主題配置——文章設置里上傳

掃描二維碼手機訪問

文章目錄