多表查詢包括內(nèi)連接和外連接
內(nèi)連接:
- 隱式內(nèi)連接
- 顯示內(nèi)連接
外連接:
- 左外連接
- 右外連接
左外連接:
在內(nèi)連接的基礎(chǔ)上保證左表的數(shù)據(jù)全部顯示趴俘。
右外連接:
在內(nèi)連接的基礎(chǔ)上保證右表的數(shù)據(jù)全部顯示悠就。
小結(jié)一下:
無論什么連接羊瘩,左表是指sql與劇中第一個(gè)表,右表是指sql語句中的第二個(gè)表阳柔。
-
子查詢
子查詢右三種形式:
- 單行單列
- 多行單列
- 多行多列(這個(gè)是將查詢結(jié)果作為一個(gè)新的表,但是需要給表取別名)
注意啦杠览,子查詢作為表需要取別名报账,否則這張表沒有名稱沒法訪問表中的字段;
having和where 的區(qū)別:
having后面可以跟聚合函數(shù)或者聚合函數(shù)的別名
但是where或者on后面不能跟聚合函數(shù)董济,也不能跟別名步清。
-
事務(wù)
事務(wù)執(zhí)行是一個(gè)整體,所有的Sql語句必須同時(shí)成功虏肾,若有一句失敗了廓啊,就必須進(jìn)行回滾。
MySql默認(rèn)每一條DML語句都是一個(gè)單獨(dú)的事務(wù)封豪,每一條語句都會(huì)自動(dòng)開啟一個(gè)事物谴轮,語句執(zhí)行完畢之后會(huì)自動(dòng)提交事務(wù),MySql默認(rèn)開始自動(dòng)提交事務(wù)吹埠。Mybatis可以通過factory.oprnSession()時(shí)設(shè)置參數(shù)是true還是false來表示手動(dòng)還是自動(dòng)第步,默認(rèn)是手動(dòng)的。
如果使用Dos命令出現(xiàn)了下面的圖片就說明沒有輸入缘琅;分號(hào)進(jìn)行結(jié)束粘都。
- 事務(wù)原理
開啟事務(wù)之后,所有的操作都會(huì)臨時(shí)保存到事務(wù)的日志中刷袍,事務(wù)日志只有在得到commit命令才會(huì)同步到數(shù)據(jù)表中翩隧,其他任何情況都會(huì)清空事務(wù)日志(rollback,斷開連接)呻纹。
- 回滾點(diǎn)
當(dāng)某些成功的操作完成之后堆生,后續(xù)的操作有可能成功,也有可能失敗雷酪。但是不管成功還是失敗淑仆,前面的操作都已經(jīng)成功,我們可以在當(dāng)前成功的位置設(shè)置一個(gè)回滾點(diǎn)太闺,以供后續(xù)的失敗操作返回到該位置糯景,而不是返回所有的操作,這個(gè)點(diǎn)被成為回滾點(diǎn)省骂。
回滾點(diǎn)的操作語句 | 語句 |
---|---|
設(shè)置回滾點(diǎn) | savepoint 名字 |
回到回滾點(diǎn) | rollback to 名字 |
設(shè)置回滾點(diǎn)的意義蟀淮,可能夠讓我們?cè)谑〉臅r(shí)候回到回滾點(diǎn),而不是事務(wù)開啟的時(shí)候钞澳。
- 事務(wù)的四大屬性(ACID)
事務(wù)特性 | 含義 |
---|---|
原子性(Atomic) | 每個(gè)事務(wù)中的所有sql語句都是一個(gè)整體怠惶,要么同時(shí)成功,要么同時(shí)失敗 |
一致性(Consistency) | 事務(wù)執(zhí)行前后數(shù)據(jù)庫的狀態(tài)應(yīng)該是一致的轧粟,比如說總金額是恒定的 |
隔離性(isolation) | 事務(wù)和事務(wù)之間不應(yīng)該相互影響策治,執(zhí)行時(shí)保持隔離的狀態(tài) |
持久性(Durability) | 一旦事務(wù)執(zhí)行成功脓魏,就永久修改了數(shù)據(jù)庫,即使關(guān)機(jī)也應(yīng)該保存了下來 |
并發(fā)訪問的問題
并發(fā)訪問的問題 | 含義 |
---|---|
臟讀 | 一個(gè)事務(wù)讀到了另一個(gè)事務(wù)中還沒有提交的數(shù)據(jù) |
不可重復(fù)讀 | 一個(gè)事務(wù)中兩次讀取的內(nèi)容不一致通惫,要求的是一個(gè)食物中多次讀取時(shí)數(shù)據(jù)是一致的 |
幻讀 | 一個(gè)事務(wù)中兩次讀取的數(shù)據(jù)的數(shù)量不一致茂翔,要求在一個(gè)事務(wù)多次讀取的數(shù)據(jù)的數(shù)量是一致的 |
- MySql數(shù)據(jù)庫的四種隔離級(jí)別
級(jí)別 | 名字 | 英文名字 | 臟讀 | 不可重復(fù)讀 | 幻讀 | 數(shù)據(jù)庫默認(rèn)級(jí)別 |
---|---|---|---|---|---|---|
1 | 讀未提交 | read uncommitted | 是 | 是 | 是 | |
2 | 讀已提交 | read committed | 否 | 是 | 是 | Oracle和SQL Sercer |
3 | 可重復(fù)讀 | repeatable read | 否 | 否 | 是 | MySql默認(rèn)的級(jí)別 |
4 | 串行化 | serializable | 否 | 否 | 否 |
事務(wù)的隔離級(jí)別越高,性能越差履腋,但是安全性越高珊燎。