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

1.drop,delete與truncate的區別

相同點:

truncate和不帶where子句的delete,以及drop都會刪除表內的數據mysql

不一樣點:
  • 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標準容許。他們被用於保存值,該值的準確精度是極其重要的值,例如與金錢有關的數據。sql

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)到事務開始前的狀態,就像這個事務歷來沒有執行過同樣。函數

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

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

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

5.MYSQL相比於其餘數據庫有哪些特色?

MySQL是一個小型關係型數據庫管理系統,開發者爲瑞典MySQL AB公司,如今已經被Sun公司收購,支持FreeBSD、Linux、MAC、Windows等多種操做系統與其餘的大型數據庫例如Oracle、DB二、SQL Server等相比功能稍弱一些。其特色有:操作系統

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

6.視圖的做用,視圖能夠更改麼?

視圖是虛擬的表,與包含數據的表不同,視圖只包含使用時動態檢索數據的查詢;不包含任何列或數據。使用視圖能夠簡化複雜的sql操做,隱藏具體的細節,保護數據;視圖建立後,可使用與表相同的方式利用它們。.net

視圖不能被索引,也不能有關聯的觸發器或默認值,若是視圖自己內有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

來源:blog.csdn.net/Black1499/article/details/84945702

相關文章
相關標籤/搜索