1.什麼是內連線、左(外)連線、右(外)連線、外連線
內連線:組合兩個表中的記錄,返回關聯字段相符的記錄,也就是返回兩個表的交集(陰影)部分。
左連線:left join 是left outer join的簡寫,它的全稱是左外連線,是外連線中的一種。
左(外)連線,左表(a_table)的記錄將會全部表示出來,而右表(b_table)只會顯示符合搜尋條件的記錄。右表記錄不足的地方均為null。
右連線:right join是right outer join的簡寫,它的全稱是右外連線,是外連線中的一種。
與左(外)連線相反,右(外)連線,左表(a_table)只會顯示符合搜尋條件的記錄,而右表(b_table)的記錄將會全部表示出來。左表記錄不足的地方均為null。
(全)外連線
2.資料庫的事務有哪些特性?
acid,原子性(atomicity)、一致性(consistency)、隔離性(isolation)、永續性(durability)。view code原子性(atomicity):事務是資料庫邏輯工作單元,事務中包含的操作要麼執行成功,要麼都執行失敗。
一致性(consistency):事務要保證資料庫整體資料的完整性和業務的資料的一致性,事務成功提交整體資料修改,事務錯誤則回滾到資料回到原來的狀態;
隔離性(isolation):乙個事務的執行過程中不能影響到其他事務的執行,即乙個事務內部的操作及使用的資料對其他事務是隔離的,併發執行各個事務之間無不干擾。
永續性(durability):即乙個事務執一旦提交,它對資料庫資料的改變是永久性的。之後的其它操作不應該對其執行結果有任何影響。
3.資料庫中的隔離等級有哪些?
先簡單介紹一下什麼是髒讀,不可重複讀,幻讀view code髒讀是乙個事務讀取到另乙個事務的中間狀態的資料;
不可重複讀是乙個事務讀取到另乙個事務提交後更新的資料,導致該事務前後兩次讀取的資料不一致;
幻讀是乙個事務在讀取某個範圍內的資料時由於另乙個事務在該範圍內新增或刪除了某些資料,導致該事務前後兩次讀取的資料量不一致;
隔離等級:
未提交讀(read uncommitted)
事務中的修改,即使沒有提交,對其它事務也是可見的。
提交讀(read committed)
乙個事務只能讀取已經提交的事務所做的修改。換句話說,乙個事務所做的修改在提交之前對其它事務是不可見的。
可重複讀(repeatable read)
保證在同乙個事務中多次讀取同樣資料的結果是一樣的。
可序列化(serializable)
強制事務序列執行。
隔離級別 髒讀 不可重複讀 幻影讀 加鎖讀
未提交讀 √ √ √ ×
提交讀 × √ √ ×
可重複讀 × × √ ×
可序列化 × × × √
4.樂觀鎖和悲觀鎖
定義:view code悲觀鎖(pessimistic lock):
每次獲取資料的時候,都會擔心資料被修改,所以每次獲取資料的時候都會進行加鎖,確保在自己使用的過程中資料不會被別人修改,使用完成後進行資料解鎖。由於資料進行加鎖,期間對該資料進行讀寫的其他執行緒都會進行等待。
樂觀鎖(optimistic lock):
每次獲取資料的時候,都不會擔心資料被修改,所以每次獲取資料的時候都不會進行加鎖,但是在更新資料的時候需要判斷該資料是否被別人修改過。如果資料被其他執行緒修改,則不進行資料更新,如果資料沒有被其他執行緒修改,則進行資料更新。由於資料沒有進行加鎖,期間該資料可以被其他執行緒進行讀寫操作。
適用場景:
悲觀鎖:比較適合寫入操作比較頻繁的場景,如果出現大量的讀取操作,每次讀取的時候都會進行加鎖,這樣會增加大量的鎖的開銷,降低了系統的吞吐量。
樂觀鎖:比較適合讀取操作比較頻繁的場景,如果出現大量的寫入操作,資料發生衝突的可能性就會增大,為了保證資料的一致性,應用層需要不斷的重新獲取資料,這樣會增加大量的查詢操作,降低了系統的吞吐量。
總結:兩種所各有優缺點,讀取頻繁使用樂觀鎖,寫入頻繁使用悲觀鎖。
資料庫原理總結
資料庫 database 存放和提供資料的 庫房 資料 data 資料庫中儲存的基本物件。資料庫管理系統 dbms 位於使用者與作業系統之間的一層資料管理軟體。資料庫系統 database system 包含資料庫 dbms 應用系統 資料庫管理員 dba 主鍵 primary key 用於唯一的標...
MySQL資料庫索引原理總結
mysql資料庫中索引 在mysql索引使用中,常常出現索引效能需要考慮的問題,那我們是否應當對索引原理進行深入思考。mysql中不同的儲存引擎使用的索引原理是不同的,下面介紹三種型別的索引型別b tree b tree hash。什麼是btree btree是一種高效的資料庫儲存結構,具體結構形式...
005資料庫基礎原理筆記
投影 在乙個二維表當中,根據條件選出需要的列。選擇 在二維表當中,根據條件選擇合適的行。連線 從一張或者多張表當中,選擇需要的列並結合在一起。關鍵字 select from語句可以一行或多行書寫,大小寫不敏感 null值 未定義,不可用的的值。列的別名 重新命名乙個列的標題,緊跟在列名後面,也可以在...