win7做網(wǎng)站服務(wù)器seo的主要分析工具
文章目錄
- CURD不加控制,會(huì)有什么問(wèn)題?
- CURD滿(mǎn)足什么屬性,能解決上述問(wèn)題?
- 什么是事務(wù)?
- 為什么會(huì)出現(xiàn)事務(wù)
- 事務(wù)的版本支持
CURD不加控制,會(huì)有什么問(wèn)題?
CURD滿(mǎn)足什么屬性,能解決上述問(wèn)題?
- 買(mǎi)票的過(guò)程得是原子的
- 買(mǎi)票互相應(yīng)該不能影響
- 買(mǎi)完票應(yīng)該要永久有效
- 買(mǎi)前,和買(mǎi)后都要是確定的狀態(tài)
什么是事務(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 ,這樣如果大家都訪問(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ì)丟失。
為什么會(huì)出現(xiàn)事務(wù)
事務(wù)被 MySQL 編寫(xiě)者設(shè)計(jì)出來(lái),本質(zhì)是為了當(dāng)應(yīng)用程序訪問(wèn)數(shù)據(jù)庫(kù)的時(shí)候,事務(wù)能夠簡(jiǎn)化我們的編程模型,不需要我們?nèi)タ紤]各種各樣的潛在錯(cuò)誤和并發(fā)問(wèn)題.
可以想一下當(dāng)我們使用事務(wù)時(shí),要么提交,要么回滾,我們不會(huì)去考慮網(wǎng)絡(luò)異常了,服務(wù)器宕機(jī)了,同時(shí)更改一個(gè)數(shù)據(jù)怎么辦對(duì)吧?
因此事務(wù)本質(zhì)上是為了應(yīng)用層服務(wù)的.而不是伴隨著數(shù)據(jù)庫(kù)系統(tǒng)天生就有的.
備注:我們后面把 MySQL 中的一行信息,稱(chēng)為一行記錄
事務(wù)的版本支持
在 MySQL 中只有使用了 Innodb 數(shù)據(jù)庫(kù)引擎的數(shù)據(jù)庫(kù)或表才支持事務(wù), MyISAM 不支持。