數據庫面試題及答案


1. 觸發器的作用?

   觸發器是一種特殊的存儲過程, 主要是通過時間來出發而被執行的. 它可以強化約束,

來維護數據的完整性和一致性, 可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化. 可以級聯運算 

2. 什么是存儲過程? 用什么來調用?

  存儲過程是一個預編譯的SQL語句, 有點事允許模塊化的設計, 只需要創建一次,就可以被多次調用,

如果需要執行多次SQL,那么存儲過程的速度更快. 可以用命令對象來調用存儲過程. 可以供外部程序調用, 如java程序

3. 存儲過程的有優缺點?
  優點: 存儲過程是一個預編譯的SQL語句, 執行效率高
  放在數據庫中,直接調用,減少網絡通信
  安全性高
  可重復使用
  缺點: 移植性差

4. 存儲過程與函數的區別?   

  存儲過程: 在數據庫中完成指定的增刪改查操作
  申明: procedure
  函數: 在編程語言中進行任務的處理
  申明: function

5. 索引的作用? 和他的優點缺點是什么?   

  索引就是一種特殊的查詢表, 數據庫的搜索可以利用它加速對數據的檢索. 類似於現實生活中的目錄. 不需要查找整本書就可以找到想要的結果.

6. 什么樣的字段適合建立索引?   

  唯一, 不為空, 經常被查詢的字段 7. 索引的類型有哪些?
  邏輯上: 單行索引,多行索引,唯一索引,非唯一索引,函數索引,域索引.
  物理上: 分區索引, 非分區索引
  B-tree: 正常性B樹
  反轉型B樹
  bitmap位圖索引
8. 什么是事務? 什么是鎖?
  事務就是被綁在一起作為一個邏輯工作單元的SQL語句分組, 如果任何一個語句操作失敗那么整個操作就會失敗, 會回滾到之前的狀態. 要么全部執行, 要么一個都不執行.
  鎖: DBMS中, 鎖是實現事務的關鍵.
9. 什么叫視圖? 游標是什么?
  視圖就是一種虛擬的表, 具有和物理表相同的功能. 可以對視圖進行增改查操作, 視圖通常是一個表或多個表的行或列的子集
  游標是遍歷結果集的一個指針, 用來逐條處理數據
10. 視圖的優缺點?
  優點: 對數據的選擇性訪問
  用戶可以通過簡單的查詢從復雜查詢中得到結果
  維護數據的獨立性
  對相同的數據產生不同的視圖
  缺點: 性能
11. 列舉幾種表連接的方式,有什么區別?
  左連接: 左邊為主表表數據全部顯示, 匹配表的不匹配部分不顯示
  右連接: 右邊為主表表數據全部顯示, 匹配表的不匹配部分不顯示
  內連接: 只有兩個元素表相匹配的才能在結果集中顯示
  全外連接: 連接中的不匹配的數據全部會顯示出來
  交叉連接: 笛卡爾乘積, 顯示的結果是連接表數的乘積
12. 主鍵和外鍵的區別?
  主鍵在本表中是唯一的,不為空的, 外鍵可以重復和為空.
  外鍵和另外一張表相關聯, 不能創建對應表中不存在的外鍵.
13. 在數據庫中查詢語句速度很慢, 如何優化?
  建立索引
  減少表之間的關聯
  優化SQL語句
  簡化查詢字段
14. 數據庫三范式是什么?
  第一范式: 列不可再分
  第二范式: 行可以唯一區分, 主鍵約束
  第三范式: 表的非主屬性不能依賴其他表的非主屬性外鍵約束
15. union和union all有什么不同?
  union會刪掉重復的記錄, union all不會
16. varchar2和varchar有什么區別?
  varchar2是Oracle自己開發的, 目前varchar2和varchar是同義詞, 關鍵點是varchar是可變長度的, 可以根據實際的長度來存儲
17. oracle和mysql的區別?
  庫函數不同
  Oracle是用表空間來管理的, mysql不是
  SQL語句不同
  分頁查詢不同
18. oracle語句有多少類型?
  DDL, DML, DCL
  DDL: 建表,建數據庫,建立約束,修改約束,權限修改
  DML: insert, update, delete
  DCL: 管理用戶權限
19. oracle的分頁查詢語句?
  select * from table where row_num between 1 and 10;
20. 從數據庫中隨機選擇50條?
  select * from (select * from example order by dbms_random.random) where rownum <= 50;
21. order by與group by的區別?
  order by是排序查詢
  group by是分組查詢 having只能在group by之后, 使用group by查詢的語句需要使用聚合函數
22. commit在哪里會運用?
  Oracle的commit就是DML語句提交數據. 在未提交之前你的操作都是保存在內存中, 沒有更新到物理內存中.

  執行commit從用戶角度來講就是更新到物理文件了. 事實上commit還寫入了日志文件
23. 行轉列, 列轉行怎么轉?
  使用decode函數, 或者使用case when語句
24. 什么是PL/SQL?
  PL/SQL是一種程序語言,叫做過程化SQL語言, PL/SQL是對oracle數據庫對SQL語句的擴展.

  在普通的SQL語句的使用上增加了編程語言的特點. 通過邏輯判斷,循環等操作來實現復雜的功能或者計算.     

  PL/SQL只有Oracle數據庫有, mySQL現在不支持PL/SQL
25. 序列的作用?
  Oracle使用序列來生成唯一的編號, 用來處理一個表中的自增字段.
26. 表和視圖的關系?
  視圖其實就是一條查詢語句, 用於顯示一個或多個表或其他視圖中的數據, 表就是關系型數據庫中實際存儲數據用的.
27. oracle基本數據類型?
  字符串 char nchar varchar varchar2 nvarchar2
  數字 number integer
  浮點 binary_float binary_double float
  日期時間 date timestamp
  字符塊 blob clob nclob bfile
28. truncate與delete的區別?
  delete table: 刪除內容, 不刪除定義, 不釋放空間
  truncate: 刪除內容和定義,釋放空間
29. oracle獲取系統時間?
  select to_char(sysdate,"yyyy-MM-dd") from dual
30. oracle如何去重?
  使用distinct關鍵字


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM