為什么使用關(guān)系型數(shù)據(jù)庫?
~ 持久化 / 管理數(shù)據(jù)(方便查詢)
~ 一致性 ---> 事務(wù) ---> 鎖
并發(fā)數(shù)據(jù)訪問 ---> 五類問題
- 第一類丟失更新
- 第二類丟失更新
- 臟讀(讀臟數(shù)據(jù)):一個事務(wù)讀到另一個事務(wù)還沒有提交的數(shù)據(jù)。
- 不可重復(fù)讀:一個事務(wù)讀取之前獲取的數(shù)據(jù),發(fā)現(xiàn)原來的數(shù)據(jù)已經(jīng)被另一個已提交的事務(wù)修改。
- 幻讀:一個事務(wù)讀取數(shù)據(jù),讀到了另一個已提交事務(wù)插入的新數(shù)據(jù)。
鎖:共享鎖、排他鎖、表鎖、行鎖
- MyISAM ---> 讀數(shù)據(jù)
- InnoDB ---> 行鎖,事務(wù) ---> 互聯(lián)網(wǎng)高并發(fā)
- Memory
設(shè)置合理的事務(wù)隔離級別讓MySQL自動選擇合適的鎖
- 查看事務(wù)隔離級別:select @@tx_isolation;
- 修改事務(wù)隔離級別:set session transaction isolation level read committed;
~ READ UNCOMMITTED --> 臟讀
~ READ COMMITTED --> 不可重復(fù)讀
~ REPEATABLE READ --> 幻讀
~ SERIALIZABLE --> 沒任何毛病(性能最差)
事務(wù)隔離級別越高,數(shù)據(jù)越安全,但是性能也越差
~ 完整性
- 實體完整性(每個實體都是獨一無二的,沒有冗余)- 主鍵/唯一索引
- 參照完整性(父表沒有的記錄子表也不能出現(xiàn))- 外鍵
~ 注意:實際項目中出于性能的考慮會去掉外鍵約束
- 域完整性(錄入的數(shù)據(jù)都是有效的)
~ 數(shù)據(jù)類型和數(shù)據(jù)長度
~ 非空約束
~ 默認值約束
~ 檢查約束范式理論(Normal Form)---> 設(shè)計表
~ 數(shù)據(jù)庫表的規(guī)范程度
- 1NF:字段不可分割
- 2NF:非主鍵字段都依賴主鍵
- 3NF:消除傳遞依賴
~ 實際項目中可能為了提升性能使用反范式設(shè)計
2020-06-11 數(shù)據(jù)庫基礎(chǔ)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。