面試必問!10 道經典 MySQL 面試題

1.drop,delete與truncate的區別
相同點:
truncate和不帶where子句的delete,以及drop都會刪除表內的數據

不同點:
truncate會清除表數據並重置id從1開始,delete就只刪除記錄,drop可以用來刪除表或數據庫並且將表所佔用的空間全部釋放
truncate和delete只刪除數據不刪除表的結構。drop語句將刪除表的結構被依賴的約(constrain),觸發器(trigger),依賴於該表的存儲過程/函數將保留,但是變爲 invalid 狀態。
速度上一般來說: drop> truncate > delete
使用上,想刪除部分數據行用 delete,想刪除表用 drop,想保留表而將所有數據刪除,如果和事務無關,用truncate即可。如果和事務有關,或者想觸發trigger,還是用delete。
delete是DML語句,不會自動提交。drop/truncate都是DDL語句,執行後會自動提交。

2.mysql裏記錄貨幣用什麼字段類型好
NUMERIC 和DECIMAL 類型被MySQL實現爲同樣的類型,這在SQL92標準允許。他們被用於保存值,該值的準確精度是極其重要的值,例如與金錢有關的數據。

DECIMAL和NUMERIC值作爲字符串存儲,而不是作爲二進制浮點數,以便保存那些值的小數精度。

3.MySQL中myisam與innodb的區別
InnoDB支持事務,而MyISAM不支持事務
InnoDB支持行級鎖,而MyISAM支持表級鎖
InnoDB支持MVCC, 而MyISAM不支持
InnoDB支持外鍵,而MyISAM不支持
InnoDB不支持全文索引,而MyISAM支持。
InnoDB不能通過直接拷貝表文件的方法拷貝表到另外一臺機器, myisam 支持
InnoDB表支持多種行格式, myisam 不支持
InnoDB是索引組織表, myisam 是堆表

4.事務的四個特性及含義
數據庫事務transanction正確執行的四個基本要素:ACID,原子性(Atomicity)、一致性(Correspondence)、隔離性(Isolation)、持久性(Durability)。

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

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

隔離性: 隔離狀態執行事務,使它們好像是系統在給定時間內執行的唯一操作。如果有兩個事務,運行在相同的時間內,執行 相同的功能,事務的隔離性將確保每一事務在系統中認爲只有該事務在使用系統。這種屬性有時稱爲串行化,爲了防止事務操作間的混淆,必須串行化或序列化請 求,使得在同一時間僅有一個請求用於同一數據。

持久性: 在事務完成以後,該事務所對數據庫所作的更改便持久的保存在數據庫之中,並不會被回滾。

5.MYSQL相比於其他數據庫有哪些特點?
MySQL是一個小型關係型數據庫管理系統,開發者爲瑞典MySQL AB公司,現在已經被Sun公司收購,支持FreeBSD、Linux、MAC、Windows等多種操作系統與其他的大型數據庫例如Oracle、DB2、SQL Server等相比功能稍弱一些。其特點有:

  • 可以處理擁有上千萬條記錄的大型數據;
  • 支持常見的SQL語句規範;
  • 可移植行高,安裝簡單小巧;
  • 良好的運行效率,有豐富信息的網絡支持;
  • 調試、管理,優化簡單(相對其他大型數據庫)。

6.視圖的作用,視圖可以更改麼?
視圖是虛擬的表,與包含數據的表不一樣,視圖只包含使用時動態檢索數據的查詢;不包含任何列或數據。使用視圖可以簡化複雜的sql操作,隱藏具體的細節,保護數據;視圖創建後,可以使用與表相同的方式利用它們。

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

7.存儲過程與觸發器的區別
觸發器與存儲過程非常相似,觸發器也是SQL語句集,兩者唯一的區別是觸發器不能用EXECUTE語句調用,而是在用戶執行Transact-SQL語句時自動觸發(激活)執行。

觸發器是在一個修改了指定表中的數據時執行的存儲過程。通常通過創建觸發器來強制實現不同表中的邏輯相關數據的引用完整性和一致性。由於用戶不能繞過觸發器,所以可以用它來強制實施複雜的業務規則,以確保數據的完整性。

觸發器不同於存儲過程,觸發器主要是通過事件執行觸發而被執行的,而存儲過程可以通過存儲過程名稱名字而直接調用。當對某一表進行諸如UPDATE、INSERT、DELETE這些操作時,SQLSERVER就會自動執行觸發器所定義的SQL語句,從而確保對數據的處理必須符合這些SQL語句所定義的規則。

8.索引的作用?和它的優點缺點是什麼?
索引就是一種特殊的查詢表,數據庫的搜索引擎可以利用它加速對數據的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的數據。

索引可以是唯一的,創建索引允許指定單個列或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了數據庫的尺寸大小。

9.union 與union all的區別
union 在進行表連接後會篩選掉重複的記錄,所以在表連接後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。union all 則會顯示重複結果,只是簡單的兩個結果合併並返回.所以效率比union高,在保證沒有重複數據的情況下用union all.

10. SQL語言包括哪幾部分?每部分都有哪些操作關鍵字?
SQL語言包括數據定義(DDL)、數據操縱(DML),數據控制(DCL)和數據查詢(DQL)四個部分。

  • 數據定義:Create Table,Alter Table,Drop Table, Craete/Drop Index等
  • 數據操縱:Select ,insert,update,delete,
  • 數據控制:grant,revoke
  • 數據查詢:select

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章