(一)什么是存儲過程?有哪些優(yōu)缺點(diǎn)?
存儲過程是一些預(yù)編譯的SQL語句。
更加直白的理解:存儲過程可以說是一個記錄集谣蠢,它是由一些T-SQL語句組成的代碼塊,這些T-SQL語句代碼像一個方法一樣實(shí)現(xiàn)一些功能(對單表或多表的增刪改查)查近,然后再給這個代碼塊取一個名字眉踱,在用到這個功能的時候調(diào)用他就行了。
存儲過程是一個預(yù)編譯的代碼塊嗦嗡,執(zhí)行效率比較高
一個存儲過程替代大量T_SQL語句 勋锤,可以降低網(wǎng)絡(luò)通信量饭玲,提高通信速率
可以一定程度上確保數(shù)據(jù)安全
(二)索引是什么侥祭?有什么作用以及優(yōu)缺點(diǎn)?
索引是對數(shù)據(jù)庫表中一或多個列的值進(jìn)行排序的結(jié)構(gòu)茄厘,是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)
你也可以這樣理解:索引就是加快檢索表中數(shù)據(jù)的方法矮冬。數(shù)據(jù)庫的索引類似于書籍的索引。在書籍中次哈,索引允許用戶不必翻閱完整個書就能迅速地找到所需要的信息胎署。在數(shù)據(jù)庫中,索引也允許數(shù)據(jù)庫程序迅速地找到表中的數(shù)據(jù)窑滞,而不必掃描整個數(shù)據(jù)庫琼牧。
MySQL數(shù)據(jù)庫幾個基本的索引類型:普通索引、唯一索引哀卫、主鍵索引巨坊、全文索引
索引加快數(shù)據(jù)庫的檢索速度
索引降低了插入、刪除此改、修改等維護(hù)任務(wù)的速度
唯一索引可以確保每一行數(shù)據(jù)的唯一性
通過使用索引趾撵,可以在查詢的過程中使用優(yōu)化隱藏器,提高系統(tǒng)的性能
索引需要占物理和數(shù)據(jù)空間
(三)什么是事務(wù)共啃?
事務(wù)(Transaction)是并發(fā)控制的基本單位占调。所謂的事務(wù)暂题,它是一個操作序列,這些操作要么都執(zhí)行究珊,要么都不執(zhí)行薪者,它是一個不可分割的工作單位。事務(wù)是數(shù)據(jù)庫維護(hù)數(shù)據(jù)一致性的單位剿涮,在每個事務(wù)結(jié)束時啸胧,都能保持?jǐn)?shù)據(jù)一致性。
(四)數(shù)據(jù)庫的樂觀鎖和悲觀鎖是什么幔虏?
數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的并發(fā)控制的任務(wù)是確保在多個事務(wù)同時存取數(shù)據(jù)庫中同一數(shù)據(jù)時不破壞事務(wù)的隔離性和統(tǒng)一性以及數(shù)據(jù)庫的統(tǒng)一性纺念。
樂觀并發(fā)控制(樂觀鎖)和悲觀并發(fā)控制(悲觀鎖)是并發(fā)控制主要采用的技術(shù)手段。
悲觀鎖:假定會發(fā)生并發(fā)沖突想括,屏蔽一切可能違反數(shù)據(jù)完整性的操作
樂觀鎖:假設(shè)不會發(fā)生并發(fā)沖突陷谱,只在提交操作時檢查是否違反數(shù)據(jù)完整性。
(五) 使用索引查詢一定能提高查詢的性能嗎瑟蜈?為什么
通常,通過索引查詢數(shù)據(jù)比全表掃描要快.但是我們也必須注意到它的代價.
索引需要空間來存儲,也需要定期維護(hù), 每當(dāng)有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這意味著每條記錄的INSERT,DELETE,UPDATE將為此多付出4,5 次的磁盤I/O. 因?yàn)樗饕枰~外的存儲空間和處理,那些不必要的索引反而會使查詢反應(yīng)時間變慢.使用索引查詢不一定能提高查詢性能,索引范圍查詢(INDEX RANGE SCAN)適用于兩種情況:
基于一個范圍的檢索,一般查詢返回結(jié)果集小于表中記錄數(shù)的30%
基于非唯一性索引的檢索
(六)簡單說一說drop烟逊、delete與truncate的區(qū)別
SQL中的drop、delete铺根、truncate都表示刪除宪躯,但是三者有一些差別
delete和truncate只刪除表的數(shù)據(jù)不刪除表的結(jié)構(gòu)
速度,一般來說:drop> truncate >delete
delete語句是dml,這個操作會放到rollback segement中,事務(wù)提交之后才生效;
如果有相應(yīng)的trigger,執(zhí)行的時候?qū)⒈挥|發(fā).truncate,drop是ddl, 操作立即生效,原數(shù)據(jù)不放到rollback segment中,不能回滾. 操作不觸發(fā)trigger.
(七)drop、delete與truncate分別在什么場景之下使用位迂?
不再需要一張表的時候访雪,用drop
想刪除部分?jǐn)?shù)據(jù)行時候,用delete掂林,并且?guī)蟱here子句
保留表而刪除所有數(shù)據(jù)的時候用truncate
(八) 超鍵臣缀、候選鍵、主鍵泻帮、外鍵分別是什么精置?
超鍵:在關(guān)系中能唯一標(biāo)識元組的屬性集稱為關(guān)系模式的超鍵。一個屬性可以為作為一個超鍵锣杂,多個屬性組合在一起也可以作為一個超鍵脂倦。超鍵包含候選鍵和主鍵。
候選鍵:是最小超鍵元莫,即沒有冗余元素的超鍵赖阻。
主鍵:數(shù)據(jù)庫表中對儲存數(shù)據(jù)對象予以唯一和完整標(biāo)識的數(shù)據(jù)列或?qū)傩缘慕M合。一個數(shù)據(jù)列只能有一個主鍵柒竞,且主鍵的取值不能缺失政供,即不能為空值(Null)。
外鍵:在一個表中存在的另一個表的主鍵稱此表的外鍵。
(九)什么是視圖布隔?以及視圖的使用場景有哪些离陶?
視圖是一種虛擬的表,具有和物理表相同的功能衅檀≌信伲可以對視圖進(jìn)行增,改哀军,查沉眶,操作,試圖通常是有一個表或者多個表的行或列的子集杉适。對視圖的修改不影響基本表谎倔。它使得我們獲取數(shù)據(jù)更容易,相比多表查詢猿推。
只暴露部分字段給訪問者片习,所以就建一個虛表,就是視圖蹬叭。
查詢的數(shù)據(jù)來源于不同的表藕咏,而查詢者希望以統(tǒng)一的方式查詢,這樣也可以建立一個視圖秽五,把多個表查詢結(jié)果聯(lián)合起來孽查,查詢者只需要直接從視圖中獲取數(shù)據(jù),不必考慮數(shù)據(jù)來源于不同表所帶來的差異
(十)說一說三個范式坦喘。
第一范式(1NF):數(shù)據(jù)庫表中的字段都是單一屬性的盲再,不可再分。這個單一屬性由基本類型構(gòu)成起宽,包括整型洲胖、實(shí)數(shù)济榨、字符型坯沪、邏輯型、日期型等擒滑。
第二范式(2NF):數(shù)據(jù)庫表中不存在非關(guān)鍵字段對任一候選關(guān)鍵字段的部分函數(shù)依賴(部分函數(shù)依賴指的是存在組合關(guān)鍵字中的某些字段決定非關(guān)鍵字段的情況)腐晾,也即所有非關(guān)鍵字段都完全依賴于任意一組候選關(guān)鍵字。
第三范式(3NF):在第二范式的基礎(chǔ)上丐一,數(shù)據(jù)表中如果不存在非關(guān)鍵字段對任一候選關(guān)鍵字段的傳遞函數(shù)依賴則符合第三范式藻糖。所謂傳遞函數(shù)依賴,指的是如 果存在"A → B → C"的決定關(guān)系库车,則C傳遞函數(shù)依賴于A巨柒。因此,滿足第三范式的數(shù)據(jù)庫表應(yīng)該不存在如下依賴關(guān)系: 關(guān)鍵字段 → 非關(guān)鍵字段 x → 非關(guān)鍵字段y