簡(jiǎn)單介紹MySQL中的事務(wù)機(jī)制(3)_MySQL教程
推薦:mysql查詢(xún)區(qū)分大小寫(xiě)高性能mysql查詢(xún)默認(rèn)是不區(qū)分大小寫(xiě)的 如: 效果是一樣的。 要讓mysql查詢(xún)區(qū)分大小寫(xiě),可以: 也可以在建表時(shí),加以標(biāo)識(shí) 測(cè)試30W數(shù)據(jù) 不支持索引,查詢(xún)效率底下,不建議考慮。上面這些sql語(yǔ)句乍看不會(huì)有什么問(wèn)題,但是當(dāng)表中的數(shù)據(jù)多了以后,問(wèn)題就會(huì)凸顯出來(lái),用不到索引,
InnoDB存儲(chǔ)引擎提供事務(wù)的隔離級(jí)別有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ和SERIALIZABLE。這些隔離級(jí)別之間的區(qū)別如下:
臟讀:一個(gè)事務(wù)讀取到了另外一個(gè)事務(wù)沒(méi)有提交的數(shù)據(jù);
比如:事務(wù)T1更新了一行記錄的內(nèi)容,但是并沒(méi)有提交所做的修改。事務(wù)T2讀取到了T1更新后的行,然后T1執(zhí)行回滾操作,取消了剛才所做的修改�,F(xiàn)在T2所讀取的行就無(wú)效了;
不可重復(fù)讀:在同一事務(wù)中,兩次讀取同一數(shù)據(jù),得到內(nèi)容不同;
比如:事務(wù)T1讀取一行記錄,緊接著事務(wù)T2修改了T1剛才讀取的那一行記錄。然后T1又再次讀取這行記錄,發(fā)現(xiàn)與剛才讀取的結(jié)果不同。這就稱(chēng)為“不可重復(fù)”讀,因?yàn)門(mén)1原來(lái)讀取的那行記錄已經(jīng)發(fā)生了變化;
幻讀:同一事務(wù)中,用同樣的操作讀取兩次,得到的記錄數(shù)不相同;
比如:事務(wù)T1讀取一條指定的WHERE子句所返回的結(jié)果集。然后事務(wù)T2新插入 一行記錄,這行記錄恰好可以滿(mǎn)足T1所使用的查詢(xún)條件中的WHERE子句的條件。然后T1又使用相同的查詢(xún)?cè)俅螌?duì)表進(jìn)行檢索,但是此時(shí)卻看到了事務(wù)T2剛才插入的新行。這個(gè)新行就稱(chēng)為“幻像”,因?yàn)閷?duì)T1來(lái)說(shuō)這一行就像突然出現(xiàn)的一樣。
隔離級(jí)別越低,事務(wù)請(qǐng)求的鎖越少或保持鎖的時(shí)間就越短。InnoDB存儲(chǔ)引擎默認(rèn)的支持隔離級(jí)別是REPEATABLE READ;在這種默認(rèn)的事務(wù)隔離級(jí)別下已經(jīng)能完全保證事務(wù)的隔離性要求,即達(dá)到SQL標(biāo)準(zhǔn)的SERIALIZABLE級(jí)別隔離。
我們可以可以用SET TRANSACTION語(yǔ)句改變單個(gè)會(huì)話(huà)或者所有新進(jìn)連接的隔離級(jí)別。它的語(yǔ)法如下:
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE}
注意:默認(rèn)的行為(不帶session和global)是為下一個(gè)(未開(kāi)始)事務(wù)設(shè)置隔離級(jí)別。如果使用GLOBAL關(guān)鍵字,語(yǔ)句在全局對(duì)從那點(diǎn)開(kāi)始創(chuàng)建的所有新連接(除了不存在的連接)設(shè)置默認(rèn)事務(wù)級(jí)別。你需要SUPER權(quán)限來(lái)做這個(gè)。使用SESSION 關(guān)鍵字為將來(lái)在當(dāng)前連接上執(zhí)行的事務(wù)設(shè)置默認(rèn)事務(wù)級(jí)別。 任何客戶(hù)端都能自由改變會(huì)話(huà)隔離級(jí)別(甚至在事務(wù)的中間),或者為下一個(gè)事務(wù)設(shè)置隔離級(jí)別。
mysql> set session transaction isolation level repeatable read;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
總結(jié)
這篇文章,基本上都是理論概念的堆積,實(shí)戰(zhàn)的東西基本沒(méi)有。但是,這些都不是問(wèn)題,這也無(wú)法阻擋這篇文章成為一篇讀者喜歡的文章,是吧。好了,這篇關(guān)于MySQL中事務(wù)的文章就到此結(jié)束,以后如果有新的東西,就接著總結(jié)。
分享:WordPress如何修改Mysql數(shù)據(jù)庫(kù)的表前綴我們知道 WordPress 的數(shù)據(jù)庫(kù)表,可以設(shè)置前綴,默認(rèn)是 wp_,很多同學(xué)也就默認(rèn)用了 wp_,如果某種原因(比如提高安全性)要修改的 WordPress 數(shù)據(jù)的前綴,我們應(yīng)該怎么做? 開(kāi)始之前 修改數(shù)據(jù)是一件風(fēng)險(xiǎn)很高的工作,開(kāi)始之前必然就是做好 數(shù)據(jù)庫(kù)備份 ,也可以 把博客設(shè)置
- 在MySQL中使用GTIDs復(fù)制協(xié)議和中斷協(xié)議的教程
- MySQL獲取所有分類(lèi)的前N條記錄
- 將MySQL的臨時(shí)目錄建立在內(nèi)存中的教程
- 介紹使用WordPress時(shí)10個(gè)常用的MySQL查詢(xún)
- 初步介紹MySQL中的集合操作
- mysql查詢(xún)區(qū)分大小寫(xiě)高性能
- WordPress如何修改Mysql數(shù)據(jù)庫(kù)的表前綴
- sqlitestudio怎么用
- MS SQL Server Management Studio Express怎么安裝?
- SQL Server 錯(cuò)誤:15023
- mysql數(shù)據(jù)庫(kù)執(zhí)行SQL導(dǎo)出數(shù)據(jù)方法
- MySQL最常見(jiàn)的操作語(yǔ)句小結(jié)
MySQL教程Rss訂閱編程教程搜索
MySQL教程推薦
- navicat如何連接mysql?navicat連接mysql詳細(xì)圖文教程
- MySQL數(shù)據(jù)庫(kù)InnoDB數(shù)據(jù)恢復(fù)工具的使用小結(jié)詳解
- 安裝SQL server 提示重新啟動(dòng)計(jì)算機(jī)失敗怎么解決?
- 淺析一個(gè)MYSQL語(yǔ)法(在查詢(xún)中使用count)的兼容性問(wèn)題
- SQL Server 錯(cuò)誤:15023
- Mysql查看版本號(hào)的五種方式介紹
- 綠色版mysql注冊(cè)卸載服務(wù)方法
- MySQL字段的取值范圍
- 網(wǎng)站數(shù)據(jù)多了分頁(yè)慢該怎么辦?
- SQL查詢(xún)超時(shí)的設(shè)置方法(關(guān)于timeout的處理)
猜你也喜歡看這些
- 探討SQL Server中Case 的不同用法
- 恢復(fù)系統(tǒng)數(shù)據(jù)庫(kù)
- 談SQL Server應(yīng)用程序的高級(jí)Sql注入
- 教你SQL Server日志清除的兩種方法
- 解讀SQL2005:一個(gè)很實(shí)用的函數(shù)
- 詳解SQL Server數(shù)據(jù)體系和應(yīng)用程序邏輯
- 淺談在SQL Server2005中進(jìn)行錯(cuò)誤捕捉
- 詳解優(yōu)化SQL Server數(shù)據(jù)庫(kù)的方法
- 淺談SQL將挑戰(zhàn)操作系統(tǒng)安全
- 揭秘SQL Server開(kāi)發(fā)中需要注意的十個(gè)問(wèn)題
- 相關(guān)鏈接:
- 教程說(shuō)明:
MySQL教程-簡(jiǎn)單介紹MySQL中的事務(wù)機(jī)制(3)
。