原文出處:
本文在原文基礎上進行修改,而且沒有特定針對mysql.
一、儲存過程(以及函式)
定義理解:
儲存過程和函式是事先經過編譯並儲存在資料庫中的一段sql語句的集合。
二者的區別:
函式必須有返回值,而儲存過程沒有;
函式的引數只能是in型別,儲存過程的引數可以使用in、out、inout型別。
優點:
對**進行封裝,功能強大,呼叫方便;
將資料處理放在資料庫伺服器上,減少業務系統與資料庫的互動;
儲存過程是一個預編譯的**塊,執行效率高;
缺點:
如果儲存過程中有大量的複雜運算,會佔用資料庫伺服器的cpu,造成資料庫伺服器的壓力;
不同資料庫的儲存過程語法不一致,難以通用和維護;
業務邏輯放在資料庫中,難以迭代;
過多地使用儲存過程會降低系統的可移植性。
哪些應用場景適合使用儲存過程?
在商業資料庫的應用領域,例如金融、企業、**等,儲存過程使用廣泛,因為其業務相對穩定,而且要求資料非常準確不出錯。這樣的邏輯一旦除錯通過,將會很長時間不需要改動。甚至一些政務專案的核心邏輯都會用儲存過程編寫。
但是,也有碼農反應,十年前使用db2時,儲存過程被大量使用,基於oracle的應用,儲存過程已經不被推薦使用,一是因為邏輯不方便移植,二是消耗資料庫資源。
不適合大規模應用儲存過程的場景:
需求經常改變,導致資料庫結構經常需要調整。若修改一個表,就需要n個相關的儲存過程,這是噩夢。例如網際網路行業,需求變更頻繁。(一個原因是mysql的廣泛使用,而它的儲存過程功能較弱。)(有很多人反對這點,因為覺得改儲存過程比其改應用**來說,要少很多痛苦。)
資料需要遷移,例如原來使用sql server,現在想用oracle,也是噩夢,因為不同資料庫的廠商提供的sql函式不一樣。
商業邏輯要求聚合多種格式、多個**的資料,並且要進行資料適配,這種工作放在中間層而不是資料庫裡實現。
資料庫叢集,需要實現資料庫server端儲存過程**變更同步,十分麻煩;
很多nosql資料庫,比如mongodb,本身沒有儲存過程的概念。
參考:知乎——儲存過程在實際專案中用得多嗎?
二、關於資料庫設計的三個正規化
首先要明確,滿足第三正規化,就必定滿足第二正規化;滿足第二正規化,就必定已經滿足第一正規化。
我之前的文章:資料庫設計與三大正規化
三、檢視
為什麼需要檢視?
對於同一張表,a使用者只關新部分欄位,b使用者只關心另一些欄位,那麼此時把全部的欄位都顯示給他們看,是不合理的。
所以我們需要提供了一個表的“檢視”,給到他們想看的資料的同時,遮蔽掉其它欄位的資料。
檢視的是怎麼實現的?
檢視是儲存在資料庫中的select查詢。
其它方面,我前面的文章有提到。
四、drop、delete、truncate分別在什麼場景下使用
drop table:
truncate table
delete from
總結:
五、索引
索引的知識點前面都提過,但是還沒涉及到更深的它到底是 如何工作的,比如索引表是什麼?它儲存在哪?等問題
這裡只列出最常見的兩個問題。
什麼樣的表需要建立索引?什麼樣的欄位適合建立索引?
什麼樣的表要避免使用索引?什麼樣的欄位不適合建立索引?
六、事務
事務的acid屬性:
原子性(atomicity):事務中的所有元素必須作為一個整體提交或回滾。
一致性(consistency):事務完成時,資料必須處於一致狀態。在事務進行中,可能會不一致。如轉賬操作中的金額總量。
隔離性(isolation):對資料進行修改的所有併發事務是彼此隔離的,即事務是獨立的。
永續性(durability):指不管系統是否發生了故障,事務處理的結果都是永久的。就是說一旦事務被提交,事務的效果會被永久地保留在資料庫中。
事務的隔離級別:
編寫事務的原則:
七、資料庫的樂觀鎖、悲觀鎖(即鎖問題)
面試題 資料庫MySQL
record lock 單個行記錄上的鎖 gap lock 間隙鎖,鎖定一個範圍,不包括記錄本身 next key lock record gap,鎖定一個範圍,包括記錄本身 將事務隔離級別設定為rc 將引數nonodb locks unsafe for binlog設定為1 聯結器 主要用於身份驗...
Mysql資料庫部分面試題
資料儲存在記憶體 優點 存取速度快 缺點 資料不能永遠儲存 資料儲存檔案 優點 資料永遠儲存 缺點 1 速度比記憶體操作慢,頻繁的io操作。2 查詢資料不方便 資料儲存在資料庫 1 資料永遠儲存 2 使用sql語句,查詢方便效率高 3 管路資料方便 結構化查詢語言,是一種資料庫查詢語言。作用 用於存...
資料庫面試題
16.pl sql 包中不包含的元素為 a.儲存過程 b.儲存函式 c.表 d.遊標 單行註釋 多行註釋 評估下面的一組sql語句 create table dept deptno number 2 dname varcnar2 14 1oc varcnar2 13 rollback describ...