最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL數(shù)據(jù)庫(kù)事務(wù)原理及應(yīng)用

 更新時(shí)間:2023年04月27日 10:18:41   作者:ZIYE_190  
MySQL數(shù)據(jù)庫(kù)事務(wù)是指一組數(shù)據(jù)庫(kù)操作,要么全部執(zhí)行成功,要么全部回滾。事務(wù)可以確保數(shù)據(jù)的一致性和完整性,避免了多個(gè)用戶(hù)同時(shí)對(duì)同一數(shù)據(jù)進(jìn)行修改所帶來(lái)的問(wèn)題。MySQL通過(guò)事務(wù)日志記錄事務(wù)的操作,支持事務(wù)的回滾和提交等操作

1 事務(wù)的使用

1.1 事務(wù)概念

事務(wù)就是一組DML語(yǔ)句組成,這些語(yǔ)句在邏輯上存在相關(guān)性,這一組DML語(yǔ)句要么全部成功,要么全部失敗,是一個(gè)整體。MySQL提供一種機(jī)制,保證我們達(dá)到這樣的效果。事務(wù)還規(guī)定不同的客戶(hù)端看到的數(shù)據(jù)是不相同的。

事務(wù)就是要做的或所做的事情,主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。假設(shè)一種場(chǎng)景:你畢業(yè)了,學(xué)校的教務(wù)系統(tǒng)后臺(tái) MySQL 中,不在需要你的數(shù)據(jù),要?jiǎng)h除你的所有信息(一般不會(huì):) ), 那么要?jiǎng)h除你的基本信息(姓名,電話(huà),籍貫等)的同時(shí),也刪除和你有關(guān)的其他信息,比如:你的各科成績(jī),你在校表現(xiàn),甚至你在論壇發(fā)過(guò)的文章等。這樣,就需要多條 MySQL 語(yǔ)句構(gòu)成,那么所有這些操作合起來(lái),就構(gòu)成了一個(gè)事務(wù)。

正如我們上面所說(shuō),一個(gè) MySQL 數(shù)據(jù)庫(kù),可不止你一個(gè)事務(wù)在運(yùn)行,同一時(shí)刻,甚至有大量的請(qǐng)求被包裝成事務(wù),在向 MySQL 服務(wù)器發(fā)起事務(wù)處理請(qǐng)求。而每條事務(wù)至少一條 SQL ,最多很多 SQL ,這樣如果大家都訪(fǎng)問(wèn)同樣的表數(shù)據(jù),在不加保護(hù)的情況,就絕對(duì)會(huì)出現(xiàn)問(wèn)題。甚至,因?yàn)槭聞?wù)由多條 SQL 構(gòu)成,那么,也會(huì)存在執(zhí)行到一半出錯(cuò)或者不想再執(zhí)行的情況,那么已經(jīng)執(zhí)行的怎么辦呢?

所以,一個(gè)完整的事務(wù),絕對(duì)不是簡(jiǎn)單的 sql 集合,還需要滿(mǎn)足如下四個(gè)屬性:

  • 原子性:一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過(guò)程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開(kāi)始前的狀態(tài),就像這個(gè)事務(wù)從來(lái)沒(méi)有執(zhí)行過(guò)一樣。
  • 一致性:在事務(wù)開(kāi)始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫(kù)的完整性沒(méi)有被破壞。這表示寫(xiě)入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫(kù)可以自發(fā)性地完成預(yù)定的工作。
  • 隔離性:數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫(xiě)和修改的能力,隔離性可以防止多個(gè)事務(wù)并發(fā)執(zhí)行時(shí)由于交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致。事務(wù)隔離分為不同級(jí)別,包括讀未提交( Read uncommitted )、讀提交( read committed )、可重復(fù)讀( repeatable read )和串行化( Serializable )
  • 持久性:事務(wù)處理結(jié)束后,對(duì)數(shù)據(jù)的修改就是永久的,即便系統(tǒng)故障也不會(huì)丟失

1.2 事務(wù)的提交

事務(wù)的提交方式常見(jiàn)的有兩種:

  • 自動(dòng)提交
  • 手動(dòng)提交

查看事務(wù)提交方式

mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.41 sec)

用 SET 來(lái)改變 MySQL 的自動(dòng)提交模式

mysql> SET AUTOCOMMIT=0; #SET AUTOCOMMIT=0 禁止自動(dòng)提交
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | OFF |
+---------------+-------+
1 row in set (0.00 sec)
mysql> SET AUTOCOMMIT=1; #SET AUTOCOMMIT=1 開(kāi)啟自動(dòng)提交
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.01 sec)

1.3 事務(wù)的常見(jiàn)操作

開(kāi)啟事務(wù):start transaction;

執(zhí)行多條SQL語(yǔ)句

回滾或提交:rollback/commit;

說(shuō)明:rollback即是全部失敗,commit即是全部成功

2 事務(wù)隔離

2.1 事務(wù)并發(fā)時(shí)出現(xiàn)的問(wèn)題

臟讀(第一個(gè)事務(wù)修改數(shù)據(jù)但沒(méi)有提交,第二個(gè)事務(wù)就讀取,在第一個(gè)事務(wù)回滾后,第二個(gè)事務(wù)讀取的就是臟數(shù)據(jù))

不可重復(fù)讀(一個(gè)事務(wù)兩次讀取數(shù)據(jù),中間有另一個(gè)事務(wù)修改,第一個(gè)事務(wù)兩次讀取的數(shù)據(jù)就不同)

幻讀 一個(gè)事務(wù)兩次讀取,中間有另一個(gè)事務(wù)執(zhí)行了插入操作,造成第一個(gè)事務(wù)看到不同的結(jié)果

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

讀未提交(Read Uncommitted): 在該隔離級(jí)別,所有的事務(wù)都可以看到其他事務(wù)沒(méi)有提交的執(zhí)行結(jié)果。(實(shí)際生產(chǎn)中不可能使用這種隔離級(jí)別的),但是相當(dāng)于沒(méi)有任何隔離性,也會(huì)有很多并發(fā)問(wèn)題,如臟讀,幻讀,不可重復(fù)讀等,我們上面為了做實(shí)驗(yàn)方便,用的就是這個(gè)隔離性。

讀提交(Read Committed) :該隔離級(jí)別是大多數(shù)數(shù)據(jù)庫(kù)的默認(rèn)的隔離級(jí)別(不是 MySQL 默認(rèn)的)。它滿(mǎn)足了隔離的簡(jiǎn)單定義:一個(gè)事務(wù)只能看到其他的已經(jīng)提交的事務(wù)所做的改變。這種隔離級(jí)別會(huì)引起不可重復(fù)讀,即一個(gè)事務(wù)執(zhí)行時(shí),如果多次 select, 可能得到不同的結(jié)果。

可重復(fù)讀(Repeatable Read): 這是 MySQL 默認(rèn)的隔離級(jí)別,它確保同一個(gè)事務(wù),在執(zhí)行中,多次讀取操作數(shù)據(jù)時(shí),會(huì)看到同樣的數(shù)據(jù)行。但是會(huì)有幻讀問(wèn)題。

串行化(Serializable): 這是事務(wù)的最高隔離級(jí)別,它通過(guò)強(qiáng)制事務(wù)排序,使之不可能相互沖突,從而解決了幻讀的問(wèn)題。它在每個(gè)讀的數(shù)據(jù)行上面加上共享鎖。但是可能會(huì)導(dǎo)致超時(shí)和鎖競(jìng)爭(zhēng)(這種隔離級(jí)別太極端,實(shí)際生產(chǎn)基本不使用)

隔離級(jí)別臟讀不可重復(fù)讀幻讀
讀未提交×××
讀提交××
可重復(fù)讀×
串行化

到此這篇關(guān)于MySQL數(shù)據(jù)庫(kù)事務(wù)原理及應(yīng)用的文章就介紹到這了,更多相關(guān)MySQL數(shù)據(jù)庫(kù)事務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡(jiǎn)單介紹MySQL中GROUP BY子句的使用

    簡(jiǎn)單介紹MySQL中GROUP BY子句的使用

    這篇文章主要介紹了簡(jiǎn)單介紹MySQL中GROUP BY子句的使用,是MySQL入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • mysql如何匹配JSON中的某個(gè)字段

    mysql如何匹配JSON中的某個(gè)字段

    在MySQL數(shù)據(jù)庫(kù)中,可以通過(guò)JSON_EXTRACT函數(shù)或->>運(yùn)算符查詢(xún)JSON類(lèi)型字段內(nèi)特定鍵的值,例如,使用JSON_EXTRACT(data, '$.name')或data->>'$.name'從data字段中提取name鍵的值,并用于比較得到name為"張三"的記錄
    2024-11-11
  • MySQL正則表達(dá)式REGEXP使用詳解

    MySQL正則表達(dá)式REGEXP使用詳解

    MySQL中正則表達(dá)式通常被用來(lái)檢索或替換符合某個(gè)模式的文本內(nèi)容,根據(jù)指定的匹配模式匹配文中符合要求的特殊字符串,下面這篇文章主要給大家介紹了關(guān)于MySQL正則表達(dá)式REGEXP使用的相關(guān)資料,需要的朋友可以參考下
    2022-09-09
  • 避免MySQL中的隱式轉(zhuǎn)換的方法小結(jié)

    避免MySQL中的隱式轉(zhuǎn)換的方法小結(jié)

    在 MySQL 中,隱式轉(zhuǎn)換可能導(dǎo)致索引失效、結(jié)果不符合預(yù)期或性能問(wèn)題,以下是避免隱式轉(zhuǎn)換的具體方法,從表設(shè)計(jì)、查詢(xún)編寫(xiě)到配置優(yōu)化,逐步減少隱式轉(zhuǎn)換的發(fā)生,具體操作過(guò)程跟隨小編一起看看吧
    2025-04-04
  • 當(dāng)面試官問(wèn)mysql中char與varchar的區(qū)別

    當(dāng)面試官問(wèn)mysql中char與varchar的區(qū)別

    這篇文章主要以聊天形式圖片的添加,將面試官面試真實(shí)場(chǎng)景體現(xiàn)出來(lái),好奇的朋友不要錯(cuò)過(guò)奧
    2021-08-08
  • mysql-connector-java和mysql-connector-j的區(qū)別小結(jié)

    mysql-connector-java和mysql-connector-j的區(qū)別小結(jié)

    在Java項(xiàng)目中,引入MySQL數(shù)據(jù)庫(kù)通常需通過(guò)Maven管理MySQLConnector/J驅(qū)動(dòng),最新版本的spring-boot-starter-parent中,舊的mysql-connector-java坐標(biāo)不再適用,需改用新的com.mysql:mysql-connector-j,下面就來(lái)介紹一下區(qū)別,感興趣的可以了解一下
    2024-09-09
  • MySQL 數(shù)據(jù)庫(kù)鎖的實(shí)現(xiàn)

    MySQL 數(shù)據(jù)庫(kù)鎖的實(shí)現(xiàn)

    本文主要介紹了MySQL 數(shù)據(jù)庫(kù)鎖的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • mariadb集群搭建---Galera Cluster+ProxySQL教程

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

    這篇文章主要介紹了mariadb集群搭建---Galera Cluster+ProxySQL教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • python 連接數(shù)據(jù)庫(kù)mysql解壓版安裝配置及遇到問(wèn)題

    python 連接數(shù)據(jù)庫(kù)mysql解壓版安裝配置及遇到問(wèn)題

    今天學(xué)習(xí)python連接數(shù)據(jù)庫(kù),就想安裝一下mysql數(shù)據(jù)庫(kù),沒(méi)想到小小的數(shù)據(jù)庫(kù)也遇到了不少挫折,所以我就把自己的安裝過(guò)程以及問(wèn)題寫(xiě)出來(lái)分享給大家,需要的朋友可以參考下
    2019-06-06
  • Mysql權(quán)限管理grant命令使筆記

    Mysql權(quán)限管理grant命令使筆記

    這篇文章主要介紹了Mysql權(quán)限管理grant命令使筆記,詳細(xì)記錄了常用權(quán)限管理命令,需要的朋友可以參考下
    2014-05-05

最新評(píng)論

商南县| 芦山县| 西充县| 伊金霍洛旗| 沾化县| 垣曲县| 安顺市| 沈阳市| 崇礼县| 甘南县| 城固县| 大连市| 孟村| 稻城县| 阜新市| 清丰县| 和平县| 江川县| 扎赉特旗| 绥江县| 阳江市| 常山县| 孟连| 交城县| 凌海市| 博乐市| 静乐县| 娄烦县| 乐清市| 阿拉善右旗| 巴马| 华阴市| 遵义县| 都江堰市| 赤峰市| 龙里县| 四会市| 新余市| 临猗县| 平度市| 湾仔区|