




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、精選優質文檔-傾情為你奉上數據庫面試問題匯總1. 數據庫管理命令1.1查詢所有數據庫- show databases;1.2創建數據庫,并將數據庫字符集默認為utf-8-create database day814-default character set utf8-;1.3查看數據庫的默認字符集-show create database day814;1.4 刪除數據庫- drop database day15;1.5 修改數據庫(即修改數據庫的默認字符集)-alert database day814 default character set gbk;2. 表管理命令2.1選擇數據庫命令
2、- use day814;2.2查看所有表- show tables;2.3 創建表- create table student(-sid int,-sage int,-sname varchar(20)-);2.4 查看表結構-desc student;2.5 刪除表- drop table student;2.6 修改表添加字段-alter table student add column sgender varchar(2);刪除字段-alter table studnet drop column sgender;修改字段類型-alter table student modify col
3、umn sgender varchar(100);修改字段名稱-alter table student change column sgender gender varchar(100);修改表名稱-alter table student rename to teacher;3. 數據管理3.1增刪改數據-增加數據INSERT INTO student VALUES(1,tom,20,2);/要嚴格按照表的字段順序插入數據增加部分數據INSERT INTO student (id,name) VALUES(2,tina);-刪除數據條件刪除DELETE FROM student WHERE i
4、d=2;注意:DELETE FROM和TRUNCATE FROM的區別DELETE FROM:可以全表刪除,也可以條件刪除,只能刪除數據,不能刪除約束,最后刪除之后,可以回滾事務;TRUNCATE FROM: 只能全表刪除,不能條件刪除,即可以刪除表的數據,也可以刪除表的約束,不能回滾事務;-修改數據帶條件修改UPDATE student SET age=1,name=tom WHERE id=2;3.2查詢數據(重點)3.2.1查詢所有列(*通配符)-SELECT * FROM student;3.2.2查詢指定列-SELECT sid,sname, gender FROM student;
5、3.2.3查詢時添加常量列-SELECT sid,sname,gender,sage,java_Class AS sgrade FROM student;/在查詢student表時,添加一個sgrade列,內容為java_Class;3.2.4查詢時合并列-SELECT sid,sname,(servlet+jsp) AS 總成績 FROM student;3.2.5查詢時去除重復記錄-SELECT DISTINCT gender FROM student;-SELECT DISTINCT address FROM student;3.2.6條件查詢(模糊條件查詢)- 邏輯條件 AND(與)
6、OR(或) SELECT * FROM student WHERE sid=2 AND sname=c+; /交集SELECT * FROM student WHERE sid=2 OR sname=張三; /并集- 比較條件 <, >,<= 最重要的<>不等于,另外 BETWEEN ANDSELECT * FROM student WHERE jsp<=90 AND jsp>=75;- 判空條件需求:查詢地址為null的學生(包括null和空字符串)注意:NULL 表示沒有值空字符串 表示有值的;-模糊條件LIKE 表示模糊條件 ; %表示任意字符S
7、ELECT * FROM student WHERE sname LIKE j%;3.2.7聚合查詢常用的聚合函數 : sum() avg() max() min() count() SELECT MAX(jsp) AS max_score FROM student;SELECT AVG(jsp) AS average score FROM student;這里注意:count統計數據不包含null的數據3.2.8 分頁查詢查詢第1,2 條記錄SELECT * FROM student LIMIT 0,2;/注意:LIMIT 0:起始行行數,2:總行數;3.2.9 查詢排序ASC: 升序;DE
8、SC 降序SELECT * FROM student ORDER BY sid ASC;SELECT * FROM student ORDER BY servlet ASC;SELECT * FROM student ORDER BY servlet ASC,jsp DESC;3.2.10分組查詢- 2.11 分組查詢(group by)- 需求: 查詢男女的人數- 預期結果: - 男 3 - 女 2 -算法步驟: 1) 把學生按照性別分組(GROUP BY gender) - 2) 統計每組的人數(COUNT(*)SELECT gender,COUNT(*) FROM student GRO
9、UP BY gender;3.2.11分組查詢后篩選- 2.12 分組查詢后篩選- 需求: 查詢總人數大于2的性別- 算法:1) 查詢男女的人數- 2)篩選出人數大于2的記錄(having)- 注意: 分組之前條件使用where關鍵字,分組之后條件使用having關鍵字SELECT gender,COUNT(*) FROM student WHERE GROUP BY gender HAVING COUNT(*)>2;綜上,所有的SQL語句指令,主要包含3個部分:數據庫管理、表管理、數據管理。SQL語句分類:數據定義語言、數據查詢語言、數據操作語言。4. 數據約束4.1 默認值 4.2非
10、空 4.3唯一4.4 主鍵(=非空+唯一)5. 數據庫設計:三大范式第一范式:要求表的每個字段必須是不可分割的獨立單元;比如 student : nameJava狗娃應該改為name oldname Java 狗娃第二范式:在第一張范式基礎上,要求每張表只表達一個意思,表的每個字段都和主鍵有依賴;employee(員工): 員工編號 員工姓名 部門名稱 訂單名稱 -違反第二范式員工表:員工編號 員工姓名 部門名稱 訂單表: 訂單編號 訂單名稱 - 符合第二范式第三范式:在第二范式的基礎上,要求每張表的主鍵之外的其他字段都只能和主鍵有直接決定依賴關系;員工表: 員工編號(主鍵) 員工姓名 部門編
11、號 部門名 -符合第二范式,違反第三范式(數據冗余高)員工表:員工編號(主鍵) 員工姓名 部門編號 -符合第三范式(降低數據冗余)部門表:部門編號 部門名解析:個人對數據庫三大范式的理解:首先數據表中的每個字段都必須是不可分割的獨立單元;其次,在第一范式的基礎上 ,要求每張表只表達一個意思,表的每個字段都和主鍵有依賴;最后,在第二范式的基礎上,要求每張表的主鍵之外的其他字段都只能和主鍵有直接決定依賴關系。6. 存儲過程帶有邏輯的SQL語句,存儲過程帶上流過程控制語句(if else for while);(1) 存儲過程執行效率非常快,因為是在服務端執行;(2) 存儲過程移植性比較差,不同數據
12、的存儲過程是不能移植的;7. 數據庫索引實現原理1. 關于數據庫索引采用的數據結構題目1: Mysql數據庫用過吧?l里面的索引是基于什么數據結構。答:主要是基于Hash表和B+樹題目2: 很好請你說一下B+樹的實現細節是什么樣的?B-樹和B+樹有什么區別?聯合索引在B+樹中如何存儲?答: 首先,數據庫使用樹型結構來增加查詢效率,并保持有序。那么,為什么不使用二叉樹來實現數據結構呢,二叉樹算法時間復雜度是lg(N),查詢速度和比較次數都是較小的。實際上,查詢索引操作最耗資源的不在內存中,而是磁盤IO。索引是存在磁盤上的,當數據量比較大的時候,索引的大小可能達到幾個G。那么,我們利用索引進行查詢
13、的時候,不可能把索引直接加載到內存中,只能一次讀取一個磁盤頁,一個磁盤頁對應著一個節點,一次讀取操作時一個磁盤io。在二叉樹查詢時,最壞的情況下查找的次數是樹的高度,即io次數為樹的高度。B-樹就是比二叉樹“矮胖”的樹。二叉樹的特征如下:1. 根節點至少有兩個子女2. 每個中間節點包含k-1個元素和k個孩子,其中 m/2 <= k <= m3. 每個葉子節點包含k-1個元素,其中 m/2 <= k <= m4. 所有葉子節點位于同一層5. 節點中的元素從小到大排列,正好是孩子節點的值域。(就是孩子節點的元素都比父節點中元素的最小值大,比父節點元素的最大值小)B-樹查詢的
14、次數并不比二叉樹的次數小,但是相比起磁盤io速度,內存中比較的耗時就不足為提了。所以只要樹的高度足夠低,io次數少,就可以提升查找性能。而每個節點中有多個元素,都只在內存中操作。而B+樹是基于B-樹的,增加了如下規則:1. 有k個子樹的中間節點包含有k個元素(B樹中是k-1個元素),每個元素不保存數據,只用來索引,所有數據都保存在葉子節點。2. 所有的葉子結點中包含了全部元素的信息,及指向含這些元素記錄的指針,且葉子結點本身依關鍵字的大小自小而大順序鏈接。3. 所有的中間節點元素都同時存在于子節點,在子節點元素中是最大(或最小)元素。所以,B+樹對比B-樹有如下好處:io次數少:b+樹中間節點
15、只存索引,不存在實際的數據,所以可以存儲更多的數據。索引樹更加的矮胖,io次數更少。性能穩定:b+樹數據只存在于葉子節點,查詢性能穩定范圍查詢簡單:b+樹不需要中序遍歷,遍歷鏈表即可。B樹:有序數組+平衡多叉樹; B+樹:有序數組鏈表+平衡多叉樹;數據庫索引采用B+樹的主要原因是B樹在提高了磁盤IO性能的同時并沒有解決元素遍歷的效率低下的問題。正是為了解決這個問題,B+樹應運而生。B+樹只要遍歷葉子節點就可以實現整棵樹的遍歷。而且在數據庫中基于范圍的查詢是非常頻繁的,而B樹不支持這樣的操作(或者說效率太低)。8. 數據庫三大引擎之間差異(1) MyISAM特性:不支持事務、MyISA
16、M存儲引擎不支持事務,所以對事務有要求的業務場景不能適應;表級鎖定:其鎖定機制是表級索引,這雖然可以讓鎖定的實現成本很小但也同時大大降低了并發性能;讀寫互相阻塞:不僅會在寫入時阻塞讀取,還會在讀取時,阻塞寫入,但讀本身并不會阻塞另外的讀。只會緩存索引:MyISAM可以通過key_Buffer緩存以大大提高訪問性能減少磁盤IO,但是這個緩存區只會緩存索引,而不會緩存數據。(2) InnoDB特性:具有較好的事務支持,支持4個事務隔離級別,支持多版本讀;行級鎖定:通過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響;讀寫阻塞與事務隔離級別相關;具有非常高效的緩存特性,能緩存特性,也能緩存數據;整個
17、表和主鍵以Cluster方式存儲,組成一顆平衡樹;所有Secondary Index都會保存主鍵信息;(3) NDBCluster分布式:分布式存儲引擎,可以由多個NDBCluster存儲引擎組成集群分別存放整體數據的一部分;支持事務:和Innodb一樣,支持事務;可與MySqld不在同一主機:可以和MysqlId分開存在于獨立的主機上,然后通過網絡和MysqlId通信交互;內存需求量巨大:新版本索引以及被索引的數據必須存放在內存中,老版本所有數據和索引必須存放在與內存中;9. 臟讀和幻讀在說數據庫的臟讀和幻讀時,首先要說數據庫的事務,事務的4大特性:(1) 原子性:事務是數據庫的邏輯工作單位
18、,它對數據庫的修改,要么全部執行,要么全部不執行;(2) 一致性:事務前后,數據庫的狀態都滿足所有的完整性約束;(3) 隔離性:并發執行的N個事務是隔離的,一個不影響一個,一個 事務在沒有commit之前,被修改的數據不可能被其他事務看到(如何實現的呢,通過設置數據庫的隔離級別)(4) 持久性:持久性意味著當系統或介質發生故障時,確保已提交事務的更新不能丟失,持久性主要在于DBMS的恢復性能;(系統故障,數據不丟失)臟讀:又稱無效數據讀出,一個事務讀取另外一個事務還沒有提交的數據叫做臟讀;例如:事務T1修改了一行數據,但是還沒有提交,這時候事務T2讀取了被事務T1修改后的數據,之后T1因某種原
19、因回滾了,那么事務T2讀取的數據就是臟的;解決辦法:把數據庫的事務隔離級別調整到READ_COMMITTED;不可重復讀:不可重復讀是指同一個事務內,兩個相同的查詢返回了不同的結果;例如:事務T1讀取某一數據,事務T2讀取并修改了該數據,T1為了對讀取值進行檢驗而在此讀取該數據,那么 T1發現兩次讀取的結果不同;解決辦法:把數據庫的事務隔離級別調整到REPEATABLE_COMMITTED;幻讀:例如:當系統管理員A將數據庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入了一條具體分數的記錄,當系統管理員A改結束后發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,
20、這叫幻讀。解決辦法:把數據庫的事務隔離級別調整到SERIALIZABLE_READ;綜上:重點注意 :不可重復讀和幻讀的區別,不可重復讀強調的是查詢修改,幻讀強調的是插入和刪除。10. Spring事務管理à什么是事務:事務(transaction)是由一系列操作序列構成的程序執行單元,這些操作要么都做,要么都不做,是一個不可分割的工作單位à事務的4個基本性質:原子性、一致性、隔離性、持久性à數據庫并發操作可能引起的問題:臟讀:事務A讀取了事務B中尚未提交的數據,如果事務B回滾,則A讀取使用了錯誤的數據(讀取了未提交的數據)不可重復讀:事務A多次的讀取過程中,事務
21、B對數據進行了修改,導致事務A多次讀取的數據不一致。丟失更新:在事務A期間,事務B對數據進行了更新,在事務A撤銷之后,覆蓋了事務B提交的數據。(又叫做回滾丟失)幻讀:在事務A多次讀取過程中,事務B對數據進行了新增操作,導致事務A多次讀取的數據不一致。(幻讀和不可重復讀的區別在于:不可重復讀是針對數據的更新操作,只要再記錄上加上寫鎖,就可避免, 幻讀是對記錄的insert操作,要禁止幻讀必須加上全局的寫鎖,比如在表上加寫鎖。)àSQL92定義的4中隔離級別: 未提交讀(Read uncommitted):寫操作加寫鎖,讀操作不加鎖。禁止丟失更新(回滾丟失),但是會出現所有其他數據并發問
22、題。 提交讀(Read committed):寫操作加寫鎖,讀操作加讀鎖。禁止丟失更新(回滾丟失)和臟讀,是大多數關系型數據庫的默認隔離級別。 可重復讀(Read repeatable):對于讀操作加讀鎖到事務結束,其他事務的更新操作只能等到事務結束之后進行。和提交讀的區別在于,提交讀的讀操作時加讀鎖到本次讀操作結束,可重復讀的粒度更大。禁止兩類丟失更新,禁止臟讀和不可重復讀,但可能出現幻讀。 序列化(Serializable):讀操作加表級讀鎖至事務結束。可禁止幻讀。à隔離級別越高,數據一致性的保證越強,但同時數據庫的并發能力也越差。2. 存儲過程的作用? 存儲過程可以使得對數據庫
23、的管理、以及顯示關于數據庫及其用戶信息的工作容易得多。存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲并作為一個單元處理。存儲過程存儲在數據庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變量、有條件執行以及其它強大的編程功能。 存儲過程可包含程序流、邏輯以及對數據庫的查詢。它們可以接受參數、輸出參數、返回單個或多個結果集以及返回值。 可以出于任何使用 SQL 語句的目的來使用存儲過程,它具有以下優點: 可以在單個存儲過程中執行一系列 SQL 語句。 可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。 存儲過程在創建時即在服務器上進行編譯,所以執行起來比單個 SQL 語句快。3. 查詢的優化1).根據查詢條件建立合適的index2).因為SQL是從右
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學英語課堂流動攤販英語口語交際能力培養策略論文
- 高中數學建模競賽中的數學建模問題發現與解決研究論文
- 蕪湖分公司管理制度
- 蘋果店規章管理制度
- 蛋白粉與免疫力提升
- 課標專用5年高考3年模擬A版2024高考物理專題十一電磁感應試題
- 教學目標知識與能力1培養觀察日常生活中的景物事物的
- 山東省濟寧市鄒城市第一中學2024-2025學年高一下學期5月月考地理試卷(含答案)
- 江蘇省南通市2024-2025學年八年級下學期數學期末考試模擬試卷(含答案)
- 設計與共享經濟
- 2025年重慶市中考數學試卷真題(含標準答案)
- 農機耕地合同協議書范本
- 書法鑒賞智慧樹知到期末考試答案章節答案2024年紹興文理學院
- kW殼管式干式蒸發器設計
- 最新藥店員工手冊
- 系列螺桿冷水機組操作培訓
- 五金用樣品承認書
- 催化劑對異氰酸酯反應活性的影響
- 國家開放大學《C語言程序設計》綜合測試題參考答案
- 老年人生活自理能力評估表
- 火電機組能耗指標分析指導性意見
評論
0/150
提交評論