事務(wù)與鎖是不同的。
事務(wù)具有ACID(原子性、一致性、隔離性和持久性),鎖是用于解決隔離性的一種機(jī)制。
事務(wù)的隔離級(jí)別通過(guò)鎖的機(jī)制來(lái)實(shí)現(xiàn)。
另外鎖有不同的粒度,同時(shí)事務(wù)也是有不同的隔離級(jí)別的(
一般有四種:
讀未提交Read uncommitted,
讀已提交Read committed,
可重復(fù)讀Repeatable read,
可串行化Serializable)。
在具體的程序設(shè)計(jì)中,開(kāi)啟事務(wù)其實(shí)是要數(shù)據(jù)庫(kù)支持才行的,如果數(shù)據(jù)庫(kù)本身不支持事務(wù),那么仍然無(wú)法確保你在程序中使用的事務(wù)是有效的。
鎖可以分為樂(lè)觀鎖和悲觀鎖:
悲觀鎖:認(rèn)為在修改數(shù)據(jù)庫(kù)數(shù)據(jù)的這段時(shí)間里存在著也想修改此數(shù)據(jù)的事務(wù);
樂(lè)觀鎖:認(rèn)為在短暫的時(shí)間里不會(huì)有事務(wù)來(lái)修改此數(shù)據(jù)庫(kù)的數(shù)據(jù);
我們一般意義上講的鎖其實(shí)是指悲觀鎖,在數(shù)據(jù)處理過(guò)程中,將數(shù)據(jù)置于鎖定狀態(tài)(由數(shù)據(jù)庫(kù)實(shí)現(xiàn))。
如果開(kāi)啟了事務(wù),在事務(wù)沒(méi)提交之前,別人是無(wú)法修改該數(shù)據(jù)的;
如果rollback,你在本次事務(wù)中的修改將撤消(不是別人修改的會(huì)沒(méi)有,因?yàn)閯e人此時(shí)無(wú)法修改)。
當(dāng)然,前提是你使用的數(shù)據(jù)庫(kù)支持事務(wù)。
還有一個(gè)要注意的是,部分?jǐn)?shù)據(jù)庫(kù)支持自定義SQL鎖覆蓋事務(wù)隔離級(jí)別默認(rèn)的鎖機(jī)制,如果使用了自定義的鎖,那就另當(dāng)別論。
重點(diǎn):一般事務(wù)使用的是悲觀鎖(具有排他性)。