亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文帶你理解MySQL?TCL?事務(wù)控制

 更新時(shí)間:2023年11月09日 10:45:35   作者:戀喵大鯉魚  
本文主要介紹了MySQL?TCL事務(wù)控制,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

MySQL 中并非所有的數(shù)據(jù)庫存儲引擎都支持事務(wù)操作,比如 MyISAM 就不支持。所以,使用事務(wù)處理的時(shí)候一定要確定所操作的表示是否支持事務(wù)處理,可以通過查看建表語句來查看有沒有指定事務(wù)類型的存儲引擎。當(dāng)然,事務(wù)處理是為了保障表數(shù)據(jù)原子性、一致性、隔離性、持久性。這些都需要消耗系統(tǒng)資源,請謹(jǐn)慎選擇。

本文以數(shù)據(jù)庫引擎 InnoDB 為例演示命令行模式下事務(wù)的基本操作。

1.隔離級別查看與設(shè)置

(1)查看全局和當(dāng)前會話的事務(wù)隔離級別。

-- 查看全局
SELECT @@global.transaction_isolation;

-- 查看當(dāng)前會話
SELECT @@transaction_isolation;
SELECT @@session.transaction_isolation; 
SHOW VARIABLES LIKE 'transaction_isolation';

從 MySQL 8.0 起,tx_isolation 變量被 transaction_isolation 變量替換了,所以請使用最新的變量 transaction_isolation。

MySQL InnoDB 缺省隔離級別是可重復(fù)讀(Repeatable Read)。

(2)更改事務(wù)的隔離級別。

MySQL 提供了 SET TRANSACTION 語句,該語句可以改變單個(gè)會話或全局的事務(wù)隔離級別。

SET [GLOBAL | SESSION] TRANSACTION
    transaction_characteristic [, transaction_characteristic] ...

transaction_characteristic: {
    ISOLATION LEVEL level
  | access_mode
}

level: {
     REPEATABLE READ
   | READ COMMITTED
   | READ UNCOMMITTED
   | SERIALIZABLE
}

access_mode: {
     READ WRITE
   | READ ONLY
}

不顯示指明 SESSION 或 GLOBAL,默認(rèn)是 SESSION,即設(shè)置當(dāng)前會話的事務(wù)隔離級別。如果使用 GLOBAL 關(guān)鍵字,為之后的所有新連接設(shè)置事務(wù)隔離級別,需要 SUPER 權(quán)限來做這個(gè)。

比如更改事務(wù)隔離級別為讀已提交。

-- 更改當(dāng)前會話事務(wù)隔離級別(可省略 SESSION)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

-- 更改全局事務(wù)隔離級別
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;

也可以直接使用 SET 語句為變更系統(tǒng)變量 transaction_isolation 的值修改當(dāng)前 session 的事務(wù)隔離級別。

SET @@transaction_isolation='READ-COMMITTED';

或者設(shè)置全局事務(wù)隔離級別為讀已提交。

SET @@global.transaction_isolation='READ-COMMITTED';

2.自動(dòng)提交事務(wù)

2.1 查看是否自動(dòng)提交事務(wù)

MySQL 默認(rèn)事務(wù)操作模式是自動(dòng)提交模式(autocommit )。

系統(tǒng)變量 @@autocommit 用來控制一條SQL語句提交后是否自動(dòng)執(zhí)行,默認(rèn)值是1,表示在命令行模式下每條增刪改語句在鍵入回車后,都會立即生效,而不需要手動(dòng) commit。我們可以把它關(guān)閉,關(guān)閉之后需要 commit,SQL 語句才會真正生效。

由于系統(tǒng)變量 autocommit 分為會話系統(tǒng)變量與全局系統(tǒng)變量,所以查詢的時(shí)候,最好區(qū)別一下。

查看當(dāng)前會話是否處于自動(dòng)提交模式。

SELECT @@autocommit;
SELECT @@session.autocommit;
SHOW SESSION VARIABLES LIKE 'autocommit';

如果返回結(jié)果為 1 或 ON,則表示當(dāng)前會話處于自動(dòng)提交模式;如果返回結(jié)果為 0 或 OFF,則表示當(dāng)前會話未處于自動(dòng)提交模式。

如果想查看全局配置,可查看系統(tǒng)變量 @@global.autocommit。

SELECT @@global.autocommit;
SHOW GLOBAL VARIABLES LIKE 'autocommit';

2.2 關(guān)閉或開啟自動(dòng)提交事務(wù)

  • 關(guān)閉自動(dòng)提交事務(wù)。

MySQL默認(rèn)自動(dòng)提交事務(wù),即除非顯式的開啟事務(wù)(BEGIN 或 START TRANSACTION),否則每條 SOL 語句都會被當(dāng)做一個(gè)單獨(dú)的事務(wù)自動(dòng)執(zhí)行。但有些情況下,我們需要關(guān)閉事務(wù)自動(dòng)提交來保證數(shù)據(jù)的一致性。

關(guān)閉自動(dòng)提交事務(wù)主要有兩種方法。一種是臨時(shí)關(guān)閉,只對當(dāng)前會話有效。第二種是永久關(guān)閉,對所有會話有效。

第一種:臨時(shí)關(guān)閉。

關(guān)閉當(dāng)前會話的自動(dòng)提交事務(wù)。

SET autocommit = 0;
SET @@autocommit = 0;
SET @@session.autocommit = 0;
SET SESSION autocommit = 0;

這樣之后,所有增刪改語句,都必須使用 commit 之后,才能生效。

第二種:永久關(guān)閉。

在 MySQL 中,要永久地關(guān)閉自動(dòng)提交事務(wù),必須在配置文件中進(jìn)行設(shè)置,以便在每次啟動(dòng) MySQL 服務(wù)器時(shí)都保持這個(gè)設(shè)置。

找到 MySQL 的配置文件。在大多數(shù)情況下,MySQL 的配置文件名為 my.cnf 或 my.ini,具體位置取決于您的操作系統(tǒng)和安裝方式。

打開配置文件并找到 [mysqld] 部分,添加或修改下面的配置項(xiàng)。

[mysqld]
init_connect='SET autocommit=0'

保存,然后重新啟動(dòng) MySQL 服務(wù)器即可生效。

  • 開啟自動(dòng)提交事務(wù)。

如果需要,可以開啟自動(dòng)提交模式。

SET autocommit = 1;
SET @@autocommit = 1;
SET @@session.autocommit = 1;
SET SESSION autocommit = 1;

要想永久有效,需要將上面配置文件中的配置項(xiàng)init_connect='SET autocommit=0'刪除或設(shè)置為 1。

3.事務(wù)執(zhí)行基本流程

首先創(chuàng)建一個(gè)測試數(shù)據(jù)表,建表語句如下:

CREATE TABLE transaction_test(id int primary key)engine=InnoDB;
  • 開啟一個(gè)事務(wù)。
BEGIN;

# 或
START TRANSACTION;
  • 執(zhí)行一系列增刪改語句。
INSERT INTO transaction_test VALUES(1);
  • 手動(dòng)提交或回滾。

事務(wù)回滾:

ROLLBACK;

回滾后我們查看數(shù)據(jù)表中的數(shù)據(jù)。

SELECT * FROM transaction_test;
Empty set (0.00 sec)

表中沒有數(shù)據(jù),回滾成功。

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

COMMIT;

提交后,再 ROLLBACK 則不能回滾了,數(shù)據(jù)已經(jīng)插入到數(shù)據(jù)表了。這里需要注意的是,在當(dāng)前會話中,我們還沒有手動(dòng) COMMIT 提交事務(wù)的時(shí)候,表中的數(shù)據(jù)已經(jīng)被插入了,但對于其它會話,如果事務(wù)隔離級別是 READ COMMITED,那么在 COMMIT 之前,查詢不到新插入的記錄。

4.設(shè)置事務(wù)的保存點(diǎn)

在 MySQL 中,您可以使用事務(wù)保存點(diǎn)(Savepoint)來標(biāo)記事務(wù)中的一個(gè)特定位置,以便在事務(wù)進(jìn)行過程中進(jìn)行部分回滾。事務(wù)保存點(diǎn)可以在事務(wù)內(nèi)部創(chuàng)建,并且可以用于回滾到該保存點(diǎn)之前的狀態(tài),而不影響事務(wù)中的其他操作。

  • 設(shè)置折返點(diǎn)
SAVEPOINT identifier;
  • 回滾至折返點(diǎn)
ROLLBACK [WORK] TO [SAVEPOINT] identifier;

這將撤銷從保存點(diǎn)創(chuàng)建后到當(dāng)前位置之間的所有操作。

  • 提交或繼續(xù)事務(wù)。

如果您滿意回滾后的狀態(tài),可以繼續(xù)進(jìn)行其他操作,并最終提交事務(wù)。

COMMIT; -- 提交事務(wù)

通過使用事務(wù)保存點(diǎn),您可以更細(xì)粒度地控制事務(wù)的回滾操作,以適應(yīng)復(fù)雜的業(yè)務(wù)需求。請注意,保存點(diǎn)只在當(dāng)前事務(wù)內(nèi)部有效,并且一旦事務(wù)提交或回滾,保存點(diǎn)將被清除。

參考文獻(xiàn)

13.3 Transactional and Locking Statements

MySQL 8.0 Reference Manual :: MySQL Glossary

15.7.2.1 Transaction Isolation Levels - MySQL

13.3.7 SET TRANSACTION Statement

MySQL 8.0 Reference Manual :: 5.1.8 Server System Variables

到此這篇關(guān)于一文帶你理解MySQL TCL 事務(wù)控制的文章就介紹到這了,更多相關(guān)MySQL TCL 事務(wù)控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql正確刪除數(shù)據(jù)的方法(drop,delete,truncate)

    mysql正確刪除數(shù)據(jù)的方法(drop,delete,truncate)

    這篇文章主要給大家介紹了關(guān)于mysql正確刪除數(shù)據(jù)的相關(guān)資料,DELETE語句是MySQL中最常用的刪除數(shù)據(jù)的方式之一,但也有幾種其他方法來實(shí)現(xiàn),需要的朋友可以參考下
    2023-10-10
  • MySQL數(shù)據(jù)庫21條最佳性能優(yōu)化經(jīng)驗(yàn)

    MySQL數(shù)據(jù)庫21條最佳性能優(yōu)化經(jīng)驗(yàn)

    數(shù)據(jù)庫的操作越來越成為整個(gè)應(yīng)用的性能瓶頸了,這點(diǎn)對于Web應(yīng)用尤其明顯。這篇文章主要介紹了MySQL數(shù)據(jù)庫21條最佳性能優(yōu)化經(jīng)驗(yàn)的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 詳解MySQL事務(wù)的隔離級別與MVCC

    詳解MySQL事務(wù)的隔離級別與MVCC

    這篇文章主要介紹了MySQL事務(wù)的隔離級別與MVCC的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-04-04
  • MySQL遞歸sql語句WITH表達(dá)式實(shí)現(xiàn)方法代碼

    MySQL遞歸sql語句WITH表達(dá)式實(shí)現(xiàn)方法代碼

    SQL遞歸查詢語句是指通過遞歸方式對數(shù)據(jù)進(jìn)行查詢的語句,下面這篇文章主要給大家介紹了關(guān)于MySQL遞歸sql語句WITH表達(dá)式實(shí)現(xiàn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • SQL Server服務(wù)器監(jiān)控

    SQL Server服務(wù)器監(jiān)控

    這篇文章主要介紹了SQL Server服務(wù)器監(jiān)控,SQL server監(jiān)控是收集、聚合和監(jiān)控SQL服務(wù)器的各種指標(biāo)的過程,更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-09-09
  • MySQL用戶權(quán)限設(shè)置保護(hù)數(shù)據(jù)庫安全

    MySQL用戶權(quán)限設(shè)置保護(hù)數(shù)據(jù)庫安全

    MySQL用戶權(quán)限設(shè)置是保護(hù)數(shù)據(jù)庫安全的重要措施之一。通過為用戶設(shè)置不同的權(quán)限,可以控制用戶對數(shù)據(jù)庫的訪問能力,包括讀取、修改、刪除、創(chuàng)建等操作。合理設(shè)置用戶權(quán)限可以避免誤操作、非法訪問等安全問題
    2023-05-05
  • Mysql從5.6.14安全升級至mysql5.6.25的方法

    Mysql從5.6.14安全升級至mysql5.6.25的方法

    這篇文章主要介紹了Mysql從5.6.14安全升級至mysql5.6.25的方法,本教程講的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2016-08-08
  • mysql 5.7.16 安裝配置方法圖文教程(ubuntu 16.04)

    mysql 5.7.16 安裝配置方法圖文教程(ubuntu 16.04)

    這篇文章主要為大家分享了ubuntu 16.04下mysql 5.7.16 安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • mariadb集群搭建---Galera Cluster+ProxySQL教程

    mariadb集群搭建---Galera Cluster+ProxySQL教程

    這篇文章主要介紹了mariadb集群搭建---Galera Cluster+ProxySQL教程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 在CentOS上安裝phpMyAdmin的教程

    在CentOS上安裝phpMyAdmin的教程

    這篇文章主要介紹了在CentOS上安裝phpMyAdmin的教程,phpMyAdmin是一款借助PHP腳本來操作MySQL的工具,非常具有人氣,需要的朋友可以參考下
    2015-06-06

最新評論