久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

mysql事務處理指的是什么

182次閱讀
沒有評論

共計 3226 個字符,預計需要花費 9 分鐘才能閱讀完成。

這篇文章主要介紹了 mysql 事務處理指的是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇 mysql 事務處理指的是什么文章都會有所收獲,下面我們一起來看看吧。

在 mysql 中,事務處理是一種機制,用來管理必須成批執行的 MySQL 操作,以保證數據庫不包含不完整的操作結果;事務處理可以用來維護數據庫的完整性,可保證成批的 MySQL 操作不會中途停止,它們要么完全執行,要么完全不執行。

事務處理

        事務處理(transaction processing)可以用來維護數據庫的完整性,它保證成批的 MySQL 操作要么完全執行,要么完全不執行。

例如,在人員管理系統中,刪除一個人員,既需要刪除人員的基本資料,也要刪除和該人員相關的信息,如信箱,文章等等,這樣,這些數據庫操作語句就構成一個事務!

        事務處理是一種機制,用來管理必須成批執行的 MySQL 操作,以保證數據庫不包含不完整的操作結果。利用事務處理,可以保證一組操作不會中途停止,它們或者作為整體執行,或者完全不執行(除非明確指示)。如果沒有錯誤發生,整組語句提交給(寫到)數據庫表。如果發生錯誤,則進行回退(撤銷)以恢復數據庫到某個已知且安全的狀態。

一般來說,事務是必須滿足 4 個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。

原子性:一個事務(transaction)中的所有操作,要么全部完成,要么全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

一致性:在事務開始之前和事務結束以后,數據庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及后續數據庫可以自發性地完成預定的工作。

隔離性:數據庫允許多個并發事務同時對其數據進行讀寫和修改的能力,隔離性可以防止多個事務并發執行時由于交叉執行而導致數據的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重復讀(repeatable read)和串行化(Serializable)。

持久性:事務處理結束后,對數據的修改就是永久的,即便系統故障也不會丟失。

1.1 關鍵詞

在使用事務和事務處理時,有幾個關鍵詞匯反復出現。下面是關于事務處理需要知道的幾個術語:

事務(transaction):指一組 SQL 語句;

回退(rollback):指撤銷指定 SQL 語句的過程;

提交(commit):指將未存儲的 SQL 語句結果寫入數據庫表;

保留點(savepoint):指事務處理中設置的臨時占位符(place- holder),你可以對它發布回退(與回退整個事務處理不同)。

1.2 事務控制語句

管理事務處理的關鍵在于將 SQL 語句組分解為邏輯塊,并明確規定數據何時應該回退,何時不應該回退。

1.2.1 START  TRANSACTION 開始事務

MySQL 使用下面的語句來標識事務的開始:

START TRANSACTION

1.2.2  COMMIT

一般的 MySQL 語句都是直接針對數據庫表執行和編寫的。這就是所謂的隱含提交(implicit commit),即提交(寫或保存)操作是自動進行的。
        但是,在事務處理塊中,提交不會隱含地進行。為進行明確的提交,使用 COMMIT 語句,COMMIT 會提交事務,并使已對數據庫進行的所有修改成為永久性的;如下所示:

START TRANSACTION 
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT;

在這個例子中,從系統中完全刪除訂單 20010。因為涉及更新兩個數據庫表 orders 和 orderItems,所以使用事務處理塊來保證訂單不被部分刪除。最后的 COMMIT 語句僅在不出錯時寫出更改。如果第一條 DELETE 起作用,但第二條失敗,則 DELETE 不會提交(實際上,它是被自動撤銷的)。

1.2.3 ROLLBACK

MySQL 的 ROLLBACK 命令用來回退(撤銷)MySQL 語句,如下:

SELECT * FROM orderitems;
START TRANSACTION --  事務開始
DELETE FROM orderitems;
SELECT * FROM orderitems;
ROLLBACK;
SELECT * FROM orderitems;

上例從顯示 ordertotals 表的內容開始。首先執行一條 SELECT 以顯示該表不為空。然后開始一
個事務處理,用一條 DELETE 語句刪除 ordertotals 中的所有行。另一條 SELECT 語句驗證 ordertotals 確實為空。這時用一條 ROLLBACK 語句回退 START TRANSACTION 之后的所有語句,最后一條 SELECT 語句顯示該表不為空。
        顯然,ROLLBACK 只能在一個事務處理內使用(在執行一條 START TRANSACTION 命令之后)。

事務處理用來管理 INSERT、UPDATE 和 DELETE 語句。你不能回退 SELECT 語句。(這樣做也沒有什么意義。)你不能回退 CREATE 或 DROP 操作。事務處理塊中可以使用這兩條語句,但如果你執行回退,它們不會被撤銷。

1.2.4 保留點

簡單的 ROLLBACK 和 COMMIT 語句就可以寫入或撤銷整個事務處理。但是,只是對簡單的事務處理才能這樣做,更復雜的事務處理可能需要部分提交或回退。

為了支持回退部分事務處理,必須能在事務處理塊中合適的位置放置占位符。這樣,如果需要回退,可以回退到某個占位符。這些占位符稱為保留點。為了創建占位符,可使用如下 SAVEPOINT 語句:

SAVEPOINT delete1;

每個保留點都取標識它的唯一名字,以便在回退時,MySQL 知道要回退到何處。如下操作可以回退到給出的保留點:

ROLLBACK TO delete1;

1.2.5 更改默認的提交行為

正如所述,默認的 MySQL 行為是自動提交所有更改。換句話說,任何時候你執行一條 MySQL 語句,該語句實際上都是針對表執行的,而且所做的更改立即生效。為指示 MySQL 不自動提交更改,需要使用以下語句:

SET autocommit = 0;

autocommit 標志決定是否自動提交更改,不管有沒有 COMMIT 語句。設置 autocommit 為 0(假)指示 MySQL 不自動提交更改(直到 autocommit 被設置為真為止)。

標志為連接 專用 autocommit 標志是針對每個連接而不是服務器的。

1.3 事務處理方式

MYSQL 事務處理主要有兩種方法:

用 BEGIN, ROLLBACK, COMMIT 來實現

1)BEGIN 開始一個事務

2)ROLLBACK 事務回滾

3)COMMIT 事務確認

示例:

START TRANSACTION; --  開始事務
INSERT INTO runoob_transaction_test VALUE(5);
INSERT INTO runoob_transaction_test VALUE(6);
COMMIT; --  提交事務
select * from runoob_transaction_test;

直接用 SET 來改變 MySQL 的自動提交模式:

          SET AUTOCOMMIT=0 禁止自動提交

          SET AUTOCOMMIT=1 開啟自動提交

關于“mysql 事務處理指的是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“mysql 事務處理指的是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-13發表,共計3226字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 乌兰察布市| 中牟县| 寻乌县| 祁阳县| 鹤峰县| 彰武县| 台中市| 寻乌县| 贺州市| 常德市| 颍上县| 芜湖市| 鄂托克前旗| 昆山市| 邢台县| 波密县| 霍城县| 临朐县| 奈曼旗| 天柱县| 隆化县| 措美县| 调兵山市| 永平县| 莆田市| 册亨县| 宜兴市| 尉氏县| 武穴市| 织金县| 罗平县| 琼海市| 广水市| 广饶县| 赫章县| 双牌县| 原平市| 榆社县| 南投县| 永川市| 平江县|