mysql 不用怕面試題 MySQL 面試題

2021-10-17 15:41:10 字數 2980 閱讀 7005

資料庫事務的四個特性及含義原子性(atomicity)、一致性(correspondence)、隔離性(isolation)、永續性(durability)

原子性:整個事務中的所有操作,要麼全部完成,要麼全部不完成。事務在執行過程中發生錯誤,會被回滾(rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

一致性:在事務開始之前和事務結束以後,資料庫的完整性約束沒有被破壞。

隔離性:同一時間僅有乙個請求用於同一資料。

永續性:在事務完成以後,該事務所對資料庫所作的更改便持久的儲存在資料庫之中,並不會被回滾。

檢視的作用,檢視可以更改麼檢視是虛擬的表,與包含資料的表不一樣,檢視只包含使用時動態檢索資料的查詢;不包含任何列或資料。使用檢視可以簡化複雜的sql操作。

檢視不能被索引,也不能有關聯的觸發器或預設值,如果檢視本身內有order by 則對檢視再次order by將被覆蓋。

建立檢視:create view

drop,delete與truncate的區別drop直接刪掉表 truncate刪除表中資料,再插入時自增長id又從1開始 delete刪除表中資料,可以加where字句

資料庫正規化1 第一正規化(1nf)

在任何乙個關聯式資料庫中,第一正規化(1nf)是對關係模式的基本要求,不滿足第一正規化(1nf)的資料庫就不是關聯式資料庫。

所謂第一正規化(1nf)是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化(1nf)中表的每一行只包含乙個例項的資訊。簡而言之,第一正規化就是無重複的列。

2 第二正規化(2nf)

第二正規化(2nf)是在第一正規化(1nf)的基礎上建立起來的,即滿足第二正規化(2nf)必須先滿足第一正規化(1nf)。第二正規化(2nf)要求資料庫表中的每個例項或行必須可以被惟一地區分。為實現區分通常需要為表加上乙個列,以儲存各個例項的惟一標識。這個惟一屬性列被稱為主關鍵字或主鍵、主碼。

第二正規化(2nf)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成乙個新的實體,新實體與原實體之間是一對多的關係。為實現區分通常需要為表加上乙個列,以儲存各個例項的惟一標識。簡而言之,第二正規化就是非主屬性非部分依賴於主關鍵字。

3 第三正規化(3nf)

滿足第三正規化(3nf)必須先滿足第二正規化(2nf)。簡而言之,第三正規化(3nf)要求乙個資料庫表中不包含已在其它表中已包含的非主關鍵字資訊。例如,存在乙個部門資訊表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等資訊。那麼在員工資訊表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的資訊再加入員工資訊表中。如果不存在部門資訊表,則根據第三正規化(3nf)也應該構建它,否則就會有大量的資料冗餘。簡而言之,第三正規化就是屬性不依賴於其它非主屬性。

儲存過程與觸發器的區別觸發器與儲存過程非常相似,觸發器也是sql語句集,兩者唯一的區別是觸發器不能用execute語句呼叫,而是在使用者執行sql語句時自動觸發執行

建立儲存過程create proc

建立觸發器create trigger

游標游標可以遍歷返回的多行結果。

mysql中游標只適用於儲存過程以及函式。

1.定義游標:declare 游標名 cursor for select語句;

2.開啟游標:open 游標名;

獲取結果:fetch 游標名 into 變數名[,變數名];

關閉游標:close 游標名;

索引為什麼可以加快查詢速度索引是乙個排序的列表,在這個列表中儲存著索引的值和包含這個值的資料所在行的實體地址,在資料十分龐大的時候,索引可以大大加快查詢的速度,這是因為使用索引後可以不用掃瞄全表來定位某行的資料,而是先通過索引表找到該行資料對應的實體地址然後訪問相應的資料

索引的優缺點優勢:可以快速檢索,減少i/o次數,加快檢索速度;根據索引分組和排序,可以加快分組和排序;

劣勢:索引本身也是表,因此會占用儲存空間,一般來說,索引表占用的空間的資料表的1.5倍;索引表的維護和建立需要時間成本,這個成本隨著資料量增大而增大;構建索引會降低資料表的修改操作(刪除,新增,修改)的效率,因為在修改資料表的同時還需要修改索引表;

索引的分類主鍵索引  不允許重複,不允許空值

唯一索引    唯一的,允許空值

全文索引    用大文字物件的列構建的索引

組合索引    用多個列組合構建的索引,這多個列中的值不允許有空值

索引的實現原理1、雜湊索引:

雜湊索引用索引列的值計算該值的hashcode,然後在hashcode相應的位置存該行資料的物理位置,因為使用雜湊演算法,因此訪問速度非常快,但是乙個值只能對應乙個hashcode,而且是雜湊的分布方式,因此雜湊索引不支援範圍查詢和排序的功能。

2、全文索引:

針對較大的資料,生成全文索引非常的消耗時間和空間。對於文字的大物件,或者較大的型別資料,如果使用普通索引,那麼匹配文字前幾個字元還是可行的,但是想要匹配文字中間的幾個單詞,那麼就要使用like %word%來匹配,這樣需要很長的時間來處理,響應時間會大大增加,這種情況,就可使用全文索引了,在生成全文索引時,會為文字生成乙份單詞的清單,在索引時及根據這個單詞的清單來索引

3、b-tree索引和b+tree索引:

b-tree是平衡多路查詢樹

b+tree是在b-tree基礎上的一種優化

目前大部分資料庫系統及檔案系統都採用b-tree或其變種b+tree作為索引結構

什麼時候要使用索引?主鍵自動建立唯一索引;

經常作為查詢條件在where或者order by 語句**現的列要建立索引;

查詢中與其他表關聯的字段,外來鍵關係建立索引

高併發條件下傾向組合索引;

用於聚合函式的列可以建立索引,例如使用了max(column_1)或者count(column_1)時的column_1就需要建立索引

什麼時候不要使用索引?經常增刪改的列不要建立索引;

有大量重複的列不建立索引;

表記錄太少不要建立索引。

mysql觸發器相關的企業面試題 MySQL面試題

mysql select from tb emp6 empty set 0.07 sec mysql select from tb emp7 empty set 0.03 sec mysql desc tb emp6 field type null key default extra id int ...

mysql資料結構面試題 MySQL 面試題

mysql 的一些面試題,有的是平時聊到的,有的是聽別人說的,有的是工作中遇到的,特此彙總一下,有問有答。一條 sql 查詢語句執行流程?1 聯結器。客戶端和伺服器 tcp 握手後,驗證使用者名稱密碼。使用者名稱密碼通過後,聯結器會到許可權表中查詢你擁有的許可權。之後這個連線裡面的許可權判斷邏輯,都...

面試題 不用迴圈計算1 2 100之和

前幾天看到校招的面試題,要求不要用迴圈計算出1 2 3.100之和。當我看到這道題的時候第一反應就是用遞迴寫,能用迴圈的程式不一定能用遞迴去寫,但是能用遞迴的程式一定可以用迴圈寫出。所以遞迴和迴圈是相鋪相成的。這裡我也不知道遞迴是不是面試考官想要的最優寫法,但是這題至少沒用迴圈。這裡我寫完後修改了下...