一、SQL語句的四種分類:
- DDL:操作數(shù)據(jù)庫和表的
- DML:操作表中的數(shù)據(jù)的
- DQL:查詢表中的數(shù)據(jù)的
- DCL:管理用戶的迈着,進(jìn)行授權(quán)之類的操作
二陵叽、事務(wù)
四大特性:
- 原子性:事務(wù)是最小不可分割的操作單位屡律,要么一起成功,要么一起失敗芒划。
- 持久性:事務(wù)提交或回滾后冬竟,數(shù)據(jù)庫會(huì)永久化保存數(shù)據(jù)。
- 隔離性:多個(gè)事務(wù)之間相互獨(dú)立民逼。
- 一致性:事務(wù)操作前后泵殴,數(shù)據(jù)的總量不變。(相當(dāng)于能量守恒)
開啟事務(wù):start transaction;
提交事務(wù):committed;
回滾事務(wù):rollback;
事務(wù)的隔離級別:多個(gè)事務(wù)是相互獨(dú)立的拼苍,隔離的笑诅,但是操作同一批數(shù)據(jù)時(shí),會(huì)出現(xiàn)問題疮鲫。
- 問題一:臟讀:讀到了另外一個(gè)事務(wù)未提交的數(shù)據(jù)(臟數(shù)據(jù))吆你。
- 問題二:不可重復(fù)讀:一個(gè)事務(wù)中,兩次讀取到的數(shù)據(jù)不一樣俊犯。
- 問題三:幻讀:事務(wù)一使用DML語句操作所有數(shù)據(jù)妇多,事務(wù)二添加了一條數(shù)據(jù),事務(wù)一查不到自己的修改燕侠。
為什么會(huì)幻讀者祖,首先數(shù)據(jù)庫這個(gè)軟件應(yīng)該是可以并發(fā)執(zhí)行很多任務(wù)的,很多事務(wù)在并發(fā)進(jìn)行著绢彤,因?yàn)槭聞?wù)二可能提交了事務(wù)七问,或者回滾了,那么數(shù)據(jù)庫中的數(shù)據(jù)就被更改了茫舶,但是此時(shí)事務(wù)一還沒提交或回滾的話烂瘫,事務(wù)一種進(jìn)行的操作就沒了
隔離級別:
- ①read uncommitted 讀未提交
出現(xiàn)的問題:臟讀,不可重復(fù)讀奇适,幻讀 - ②read committed 讀已提交坟比,一個(gè)事務(wù)不提交另一個(gè)事務(wù)讀不到提交后的數(shù)據(jù)。
出現(xiàn)的問題:不可重復(fù)讀嚷往,幻讀 - ③repeatable read 可重復(fù)讀葛账,只有事務(wù)提交之后才能讀取到另一個(gè)事務(wù)修改后的數(shù)據(jù)。也即兩個(gè)事務(wù)都得committed皮仁。
出現(xiàn)的問題:幻讀 - ④serializable 序列化籍琳,相當(dāng)于加鎖,有鎖時(shí)另一個(gè)事務(wù)不會(huì)執(zhí)行
出現(xiàn)問題:無
但是隨著隔離級別提高贷祈,安全性會(huì)提高趋急,性能會(huì)下降,所以說不是越高越好势誊,應(yīng)該設(shè)置相應(yīng)的隔離級別呜达。
MySQL數(shù)據(jù)庫默認(rèn)隔離級別:repeatable read,MySQL數(shù)據(jù)庫沒有幻讀問題粟耻。
Oracle數(shù)據(jù)庫默認(rèn)隔離級別:read committed