管理事務(wù)處理
1.事務(wù)處理
事務(wù)處理( transaction PRocessing)可以用來(lái)維護(hù)數(shù)據(jù)庫(kù)的完整性,它保證成批的MySQL操作要么完全執(zhí)行,要么完全不執(zhí)行。
MyISAM引擎不支持事務(wù)處理
InnoDB引擎支持事務(wù)處理
事務(wù)(transaction)指一組SQL語(yǔ)句
回退(rollback)指撤銷指定SQL語(yǔ)句的過(guò)程
提交(commit)指將未存儲(chǔ)的SQL語(yǔ)句結(jié)果寫(xiě)入數(shù)據(jù)庫(kù)表
保留點(diǎn)(savepoint)指事務(wù)處理中設(shè)置的臨時(shí)占位符(placeholder),你可以對(duì)它發(fā)布回退(與回退整個(gè)事務(wù)處理不同)。
2.控制事務(wù)處理使用Start Transaction來(lái)標(biāo)示事務(wù)處理的開(kāi)始2.1 使用RollBack來(lái)回退MySQL語(yǔ)句select* from ordertotals;start transaction;delete from ordertotals;select* from ordertotals;rollback;select* from ordertotals;運(yùn)行時(shí)會(huì)提示:ERROR 1175 : You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column需要先執(zhí)行命令SET SQL_SAFE_UPDATES = 0;
這個(gè)例子從顯示ordertotals表的內(nèi)容開(kāi)始。首先執(zhí)行一條SELECT以顯示該表不為空。然后開(kāi)始一個(gè)事務(wù)處理,用一條DELETE語(yǔ)句刪除ordertotals中的所有行。另一條SELECT語(yǔ)句驗(yàn)證ordertotals確實(shí)為空。這時(shí)用一條ROLLBACK語(yǔ)句回退STARTTRANSACTION之后的所有語(yǔ)句,最后一條SELECT語(yǔ)句顯示該表不為空。
ROLLBACK只能在一個(gè)事務(wù)處理內(nèi)使用ROLLBACK能用在INSERT、UPDATE和DELETE語(yǔ)句后,不能回退CREATE或DROP操作2.2 使用Commit在事務(wù)處理塊中,提交不會(huì)隱含地進(jìn)行。為進(jìn)行明確的提交,使用COMMIT語(yǔ)句。start transaction;delete from orderitems where order_num = 20010;delete from orderitems where order_num = 20010;commit;COMMIT語(yǔ)句僅在不出錯(cuò)時(shí)寫(xiě)出更改。如果第一條DELETE起作用,但第二條失敗,則DELETE不會(huì)提交2.3 使用保留點(diǎn)能夠支持回退部分事務(wù)處理SavePoint delete1;RollBack To delete1;保留點(diǎn)在事務(wù)處理完成(執(zhí)行一條ROLLBACK或COMMIT)后自動(dòng)釋放。也可以用RELEASESAVEPOINT明確地釋放保留點(diǎn)。2.4 更改默認(rèn)的提交行為默認(rèn)的MySQL行為是自動(dòng)提交所有更改。換句話說(shuō),任何時(shí)候你執(zhí)行一條MySQL語(yǔ)句,該語(yǔ)句實(shí)際上都是針對(duì)表執(zhí)行的,而且所做的更改立即生效。為指示MySQL不自動(dòng)提交更改,需要使用以下語(yǔ)句:SET autocommit = 0;autocommit標(biāo)志決定是否自動(dòng)提交更改,不管有沒(méi)有COMMIT語(yǔ)句。設(shè)置autocommit為0(假)指示MySQL不自動(dòng)提交更改(直到autocommit被設(shè)置為真為止)。輸入輸
新聞熱點(diǎn)
疑難解答
圖片精選