MySQL事務(wù)表和非事務(wù)表的區(qū)別
MySQL事務(wù)表是MySQL數(shù)據(jù)庫的重要概念,下面就為你詳細(xì)介紹MySQL事務(wù)表和非事務(wù)表的區(qū)別,希望可以讓您對(duì)MySQL事務(wù)表有更多的了解。
MySQL事務(wù)表支持將批處理當(dāng)做一個(gè)完整的任務(wù)統(tǒng)一提交或回滾,即對(duì)包含在事務(wù)中的多條語句要么全執(zhí)行,要么全部不執(zhí)行。非事務(wù)表則不支持此種操作,批處理中的語句如果遇到錯(cuò)誤,在錯(cuò)誤前的語句執(zhí)行成功,之后的則不執(zhí)行。
比如常用操作中,你將A表中的100條數(shù)據(jù)導(dǎo)入B表,導(dǎo)入后刪除A表中的那部分?jǐn)?shù)據(jù),但如果中途發(fā)生意外事務(wù)表
可保證操作正常,但非事務(wù)表可能會(huì)出現(xiàn)數(shù)據(jù)異常.
MySQL事務(wù)表有表鎖與行鎖
非事務(wù)表則只有表鎖
可使用下述語句之一檢查表的標(biāo)類型:
SHOW TABLE STATUS LIKE 'tbl_name';
SHOW CREATE TABLE tbl_name;
事務(wù)安全表(TST) 比起非事務(wù)安全表 (NTST)有幾大優(yōu)勢(shì):
·更安全。即使MySQL崩潰或遇到硬件問題,要么自動(dòng)恢復(fù),要么從備份加事務(wù)日志恢復(fù),你可以取回?cái)?shù)據(jù)。
·你可以合并許多語句,并用COMMIT語句同時(shí)接受它們?nèi)浚ㄈ绻鸻utocommit被禁止掉)。
·你可以執(zhí)行ROLLBACK來忽略你的改變(如果autocommit被禁止掉)。
·如果更新失敗,你的所有改變都變回原來。(用非事務(wù)安全表,所有發(fā)生的改變都是永久的)。
·事務(wù)安全存儲(chǔ)引擎可以給那些當(dāng)前用讀得到許多更新的表提供更好的部署。
非事務(wù)安全表自身有幾個(gè)優(yōu)點(diǎn),因?yàn)闆]有事務(wù)開支,所有優(yōu)點(diǎn)都能出現(xiàn):
·更快
·需要更少的磁盤空間
·執(zhí)行更新需要更少的內(nèi)存
使用下述語句,可檢查mysqld服務(wù)器支持的存儲(chǔ)引擎:
SHOW ENGINES;
也可以使用下述語句,檢查與你感興趣的存儲(chǔ)引擎有關(guān)的變量值:
SHOW VARIABLES LIKE 'have_%';
例如,要想確定InnoDB存儲(chǔ)引擎是否可用,可檢查have_innodb變量的值。
【編輯推薦】
MySQL行級(jí)鎖的優(yōu)點(diǎn)和缺點(diǎn)