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