mysql原子性怎么解決 mysql原則

數(shù)據(jù)庫事務(wù)原子性,一致性是怎樣實(shí)現(xiàn)的

原子性:一個(gè)事務(wù)內(nèi)的所有SQL操作是一個(gè)整體。都執(zhí)行成功才算整個(gè)事務(wù)成功。如果某個(gè)失敗,則必須要會(huì)退到事務(wù)執(zhí)行之前的狀態(tài),執(zhí)行成功的SQL需要被撤銷。

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺(tái)小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了千陽免費(fèi)建站歡迎大家使用!

innodb通過undo log和redo log來實(shí)現(xiàn)。

事務(wù)中,每當(dāng)執(zhí)行一條SQL語句對(duì)數(shù)據(jù)產(chǎn)生了影響,就會(huì)記錄下來與之相反的操作到undo log(撤銷日志)中,例如,更新會(huì)記錄之前的狀態(tài),刪除會(huì)形成insert,添加會(huì)形成delete,一旦事務(wù)被回滾,則執(zhí)行undo log中記錄的操作,來完成恢復(fù)到之前的狀態(tài)。這里是個(gè) 邏輯恢復(fù)哦!同時(shí),每當(dāng)執(zhí)行一條事務(wù)中的SQL,會(huì)將操作記錄到redo log中,此時(shí)事務(wù)一旦被提交,就將該redolog中的操作,持久化到磁盤上,數(shù)據(jù)就持久的記錄下來了(ACID的D)。

PS:還有,undolog才是原子性的關(guān)鍵。提供redolog,應(yīng)該主要目的是提升磁盤的IO開銷吧,如果直接寫入磁盤,IO開銷,會(huì)很大。如果先將操作記錄到redolog中,可以順序的記錄,批量的記錄,再一起同步到磁盤上,速度會(huì)比直接寫磁盤快些。 mysql在生成redolog時(shí),會(huì)使用 innodb log buffer,先緩沖到內(nèi)存中,再同步到redolog上,速度會(huì)更快。

另外關(guān)于,一致性,應(yīng)該是個(gè)整體概念,保證所有的mysql對(duì)象(數(shù)據(jù),索引,約束,日志,用戶)在事務(wù)執(zhí)行前后都具有完整的特性,應(yīng)該是mysql所有的功能都為此服務(wù)吧!

Mysql數(shù)據(jù)庫中,事務(wù)是指什么?如何使用該功能?

MySQL 事務(wù)

什么是事務(wù)?

MySQL 事務(wù)主要用于處理操作量大,復(fù)雜度高的數(shù)據(jù)。比如說,在人員管理系統(tǒng)中,你刪除一個(gè)人員,你既需要?jiǎng)h除人員的基本資料,也要?jiǎng)h除和該人員相關(guān)的信息,如信箱,文章等等,這樣,這些數(shù)據(jù)庫操作語句就構(gòu)成一個(gè)事務(wù)!

在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫引擎的數(shù)據(jù)庫或表才支持事務(wù)。

事務(wù)處理可以用來維護(hù)數(shù)據(jù)庫的完整性,保證成批的 SQL 語句要么全部執(zhí)行,要么全部不執(zhí)行。

事務(wù)用來管理 insert,update,delete 語句

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

原子性:一個(gè)事務(wù)(transaction)中的所有操作,要么全部完成,要么全部不完成,不會(huì)結(jié)束在中間某個(gè)環(huán)節(jié)。事務(wù)在執(zhí)行過程中發(fā)生錯(cuò)誤,會(huì)被回滾(Rollback)到事務(wù)開始前的狀態(tài),就像這個(gè)事務(wù)從來沒有執(zhí)行過一樣。

一致性:在事務(wù)開始之前和事務(wù)結(jié)束以后,數(shù)據(jù)庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預(yù)設(shè)規(guī)則,這包含資料的精確度、串聯(lián)性以及后續(xù)數(shù)據(jù)庫可以自發(fā)性地完成預(yù)定的工作。

隔離性:數(shù)據(jù)庫允許多個(gè)并發(fā)事務(wù)同時(shí)對(duì)其數(shù)據(jù)進(jìn)行讀寫和修改的能力,隔離性可以防止多個(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ì)丟失。

在 MySQL 命令行的默認(rèn)設(shè)置下,事務(wù)都是自動(dòng)提交的,即執(zhí)行 SQL 語句后就會(huì)馬上執(zhí)行 COMMIT 操作。因此要顯式地開啟一個(gè)事務(wù)務(wù)須使用命令 BEGIN 或 START TRANSACTION,或者執(zhí)行命令 SET AUTOCOMMIT=0,用來禁止使用當(dāng)前會(huì)話的自動(dòng)提交。

from 樹懶學(xué)堂 - 一站式數(shù)據(jù)知識(shí)平臺(tái)

mysql 事務(wù)能保證原子性嗎

原子性, 一個(gè)事務(wù) 要么完全提交 要么完全回滾,不會(huì)介于2者之間。 一致性,一個(gè)查詢發(fā)起后,不管數(shù)據(jù)發(fā)生了多少變化 多少事務(wù),查詢結(jié)果應(yīng)當(dāng)為發(fā)起查詢時(shí)間一致的數(shù)據(jù)

網(wǎng)頁題目:mysql原子性怎么解決 mysql原則
文章分享:http://muchs.cn/article22/dohoecc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計(jì)公司、網(wǎng)站導(dǎo)航、微信小程序、云服務(wù)器、虛擬主機(jī)建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營