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

首頁綜合 正文
目錄

柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 - MySQL的事務(wù)

柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 - MySQL的事務(wù)

http://yzkb.51969.com/

目錄

前言

一、事務(wù)的特性

(一)原子性

(二)一致性

(三)隔離性

(四)持久性

二、事務(wù)的控制語句

三、事務(wù)隔離級(jí)別

(一)讀未提交

(二)讀已提交

(三)可重復(fù)讀

(四)可序列化

四、使用場景

五、事務(wù)操作

(一)開啟事務(wù)

(二)提交事務(wù)

(三)回滾事務(wù)

(四)示例

六、自動(dòng)提交模式

七、隱式提交

八、提交前的保存點(diǎn)

九、注意事項(xiàng)

十、總結(jié)

前言

MySQL 中的事務(wù)是數(shù)據(jù)庫管理系統(tǒng)中用來確保多個(gè) SQL 操作以原子性的方式執(zhí)行的機(jī)制。事務(wù)可以保證一系列操作要么全部成功,要么全部失敗,從而保證數(shù)據(jù)庫的一致性和完整性。

一、事務(wù)的特性

事務(wù)具有四個(gè)重要的屬性,簡稱 ACID:

(一)原子性

事務(wù)中的所有操作要么全部成功,要么全部回滾到事務(wù)開始前的狀態(tài)。如果事務(wù)中任何一個(gè)操作失敗,整個(gè)事務(wù)都會(huì)回滾。

(二)一致性

事務(wù)的執(zhí)行不會(huì)破壞數(shù)據(jù)庫的一致性約束。即事務(wù)執(zhí)行前后,數(shù)據(jù)庫都應(yīng)該處于一致的狀態(tài)。

(三)隔離性

每個(gè)事務(wù)的操作在未提交之前,對(duì)其他事務(wù)是不可見的。事務(wù)相互獨(dú)立,即使并發(fā)執(zhí)行時(shí),事務(wù)的執(zhí)行結(jié)果與按順序執(zhí)行的結(jié)果應(yīng)當(dāng)一致。MySQL 通過不同的隔離級(jí)別來控制事務(wù)的并發(fā)執(zhí)行行為。

(四)持久性

一旦事務(wù)提交,數(shù)據(jù)庫中的數(shù)據(jù)就會(huì)被永久保存,即使系統(tǒng)崩潰,事務(wù)提交的結(jié)果也不會(huì)丟失。

二、事務(wù)的控制語句

控制語句主要有以下幾種:

START TRANSACTION 或 BEGIN:顯式開啟一個(gè)事務(wù)。 COMMIT:提交事務(wù),表示事務(wù)中的所有操作成功執(zhí)行。 ROLLBACK:回滾事務(wù),將數(shù)據(jù)庫狀態(tài)恢復(fù)到事務(wù)開始之前。 SAVEPOINT:設(shè)置一個(gè)保存點(diǎn),以便在回滾時(shí)可以部分回滾到某個(gè)點(diǎn)。 RELEASE SAVEPOINT:刪除保存點(diǎn)。 SET TRANSACTION:設(shè)置事務(wù)的隔離級(jí)別。

三、事務(wù)隔離級(jí)別

MySQL 支持四種事務(wù)隔離級(jí)別,每種級(jí)別對(duì)并發(fā)控制的嚴(yán)格程度不同:

(一)讀未提交

事務(wù)可以讀取其他事務(wù)未提交的數(shù)據(jù),容易導(dǎo)致臟讀的問題。

(二)讀已提交

事務(wù)只能讀取其他事務(wù)已經(jīng)提交的數(shù)據(jù),避免了臟讀問題,但可能出現(xiàn)不可重復(fù)讀。

(三)可重復(fù)讀

事務(wù)執(zhí)行期間,即使其他事務(wù)修改了數(shù)據(jù),當(dāng)前事務(wù)依然只能看到執(zhí)行時(shí)的快照,避免了不可重復(fù)讀問題。MySQL 的默認(rèn)隔離級(jí)別是可重復(fù)讀,同時(shí)通過間隙鎖機(jī)制來防止幻讀

(四)可序列化

最嚴(yán)格的隔離級(jí)別,所有事務(wù)串行化執(zhí)行,完全避免了臟讀、不可重復(fù)讀和幻讀,但并發(fā)性能較差。?

四、使用場景

事務(wù)通常用于涉及多表操作、轉(zhuǎn)賬系統(tǒng)等需要保證數(shù)據(jù)一致性的場景,例如:

銀行轉(zhuǎn)賬:從一個(gè)賬戶扣錢,并往另一個(gè)賬戶加錢,這兩個(gè)操作必須作為一個(gè)原子操作執(zhí)行,任何一個(gè)操作失敗,整個(gè)事務(wù)都必須回滾。 訂單處理:生成訂單時(shí),可能涉及多個(gè)表的寫操作,比如庫存減少、賬戶扣款、訂單創(chuàng)建等,這些操作需要作為一個(gè)事務(wù)處理。

五、事務(wù)操作

事務(wù)的開啟和提交涉及到控制事務(wù)的生命周期。通過顯式開啟事務(wù),并在事務(wù)內(nèi)執(zhí)行多個(gè)操作,可以確保這些操作要么全部執(zhí)行成功并提交,要么在失敗時(shí)回滾所有操作。

(一)開啟事務(wù)

MySQL 中,可以通過 START TRANSACTION 或 BEGIN 語句顯式開啟一個(gè)事務(wù)。開啟事務(wù)后,執(zhí)行的 SQL 操作會(huì)被暫時(shí)保留,直到提交或回滾。

START TRANSACTION:這是標(biāo)準(zhǔn)的 SQL 語法,用于啟動(dòng)一個(gè)新的事務(wù)。

START TRANSACTION;

BEGIN:MySQL 提供的簡寫形式,與 START TRANSACTION 等效,用于開啟事務(wù)。

BEGIN;

此時(shí),MySQL 開始記錄事務(wù)中的所有操作,直到你決定提交或回滾事務(wù)。

(二)提交事務(wù)

提交事務(wù)意味著將事務(wù)中的所有操作永久保存到數(shù)據(jù)庫中。使用 COMMIT 語句可以提交當(dāng)前事務(wù)。

COMMIT;

當(dāng)事務(wù)被提交后,所有的修改都會(huì)生效,并且這些修改會(huì)對(duì)其他事務(wù)可見。同時(shí),提交后事務(wù)就結(jié)束了,后續(xù)的操作會(huì)作為一個(gè)新的事務(wù)來處理。

(三)回滾事務(wù)

如果在事務(wù)過程中發(fā)生了錯(cuò)誤,或者你決定不保存這些操作的結(jié)果,可以使用 ROLLBACK 語句回滾事務(wù)?;貪L意味著撤銷事務(wù)中的所有操作,數(shù)據(jù)庫會(huì)恢復(fù)到事務(wù)開始之前的狀態(tài)。

ROLLBACK;

回滾操作通常用于防止因事務(wù)部分失敗而導(dǎo)致數(shù)據(jù)庫處于不一致狀態(tài)。

(四)示例

以下是一個(gè)典型的事務(wù)使用流程,演示如何開啟事務(wù)、執(zhí)行多條操作,并根據(jù)情況提交或回滾事務(wù)。

-- 1. 顯式開啟事務(wù)

START TRANSACTION;

-- 2. 執(zhí)行多個(gè) SQL 操作

UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;

UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;

-- 3. 提交事務(wù)(保存所有更改)

COMMIT;

-- 如果某個(gè)操作失敗,可以回滾整個(gè)事務(wù)

-- ROLLBACK;

六、自動(dòng)提交模式

默認(rèn)情況下,MySQL 處于自動(dòng)提交模式,這意味著每一條 SQL 語句都會(huì)自動(dòng)被作為一個(gè)獨(dú)立的事務(wù)執(zhí)行,并在執(zhí)行后立即提交。要顯式控制事務(wù),就需要暫時(shí)關(guān)閉自動(dòng)提交模式。

關(guān)閉自動(dòng)提交模式

可以通過設(shè)置 autocommit 為 0 來關(guān)閉自動(dòng)提交:

SET autocommit = 0;

此時(shí),MySQL 將不會(huì)自動(dòng)提交操作,必須顯式通過 COMMIT 或 ROLLBACK 來結(jié)束事務(wù)。

-- 手動(dòng)提交事務(wù)

COMMIT;

-- 手動(dòng)回滾事務(wù)

ROLLBACK;

恢復(fù)自動(dòng)提交模式

在完成事務(wù)處理后,你可以將 autocommit 設(shè)置為 1,恢復(fù)默認(rèn)的自動(dòng)提交行為:

SET autocommit = 1;

七、隱式提交

某些 SQL 語句會(huì)導(dǎo)致事務(wù)隱式提交,即不需要顯式調(diào)用 COMMIT,事務(wù)會(huì)自動(dòng)提交。常見的隱式提交操作包括:

DDL 操作(如 CREATE, DROP, ALTER 等)會(huì)在執(zhí)行前自動(dòng)提交事務(wù),且在執(zhí)行后也會(huì)自動(dòng)提交。

示例:

-- 創(chuàng)建表之前,事務(wù)會(huì)自動(dòng)提交

CREATE TABLE new_table (id INT);

八、提交前的保存點(diǎn)

在事務(wù)中,可以通過 SAVEPOINT 設(shè)置一個(gè)保存點(diǎn),便于部分回滾事務(wù)。如果不想回滾整個(gè)事務(wù),可以使用保存點(diǎn)回滾到某個(gè)特定的點(diǎn)。

示例:

-- 開啟事務(wù)

START TRANSACTION;

-- 設(shè)置保存點(diǎn)

SAVEPOINT sp1;

-- 執(zhí)行一些操作

INSERT INTO orders (order_id, customer_id, total_amount) VALUES (1002, 1, 300);

-- 回滾到保存點(diǎn) sp1

ROLLBACK TO sp1;

-- 提交事務(wù)

COMMIT;

九、注意事項(xiàng)

事務(wù)的注意事項(xiàng)主要有以下幾點(diǎn):

提交事務(wù)后,所有的更改將會(huì)永久保存,無法再通過 ROLLBACK 撤銷。 自動(dòng)提交模式默認(rèn)開啟時(shí),每條 SQL 都是獨(dú)立事務(wù);關(guān)閉自動(dòng)提交后,必須手動(dòng)調(diào)用 COMMIT 或 ROLLBACK 來結(jié)束事務(wù)。 在分布式數(shù)據(jù)庫中或多個(gè)系統(tǒng)間的事務(wù)處理中,還可能涉及到分布式事務(wù),通過二階段提交(2PC)等機(jī)制來保證數(shù)據(jù)的一致性。

十、總結(jié)

使用 START TRANSACTION 或 BEGIN 來顯式開啟事務(wù)。 通過 COMMIT 提交事務(wù),永久保存修改。 如果事務(wù)中發(fā)生了問題,可以通過 ROLLBACK 撤銷操作,恢復(fù)數(shù)據(jù)庫到事務(wù)開始前的狀態(tài)。 在 MySQL 默認(rèn)的自動(dòng)提交模式下,所有操作會(huì)被自動(dòng)提交,如果需要手動(dòng)控制事務(wù),必須關(guān)閉自動(dòng)提交模式。

柚子快報(bào)激活碼778899分享:數(shù)據(jù)庫 - MySQL的事務(wù)

http://yzkb.51969.com/

文章來源

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

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

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

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

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄