轉載: JAVA企業面試題精選 資料庫11-20

假裝鎮定發表於2018-09-30

轉載:https://blog.csdn.net/qq_38131668/article/details/76360172

1.11.請說明資料庫主鍵,外來鍵的作用

參考答案:

  主鍵作用:能保證設定主鍵的列非空且唯一.另外,在定義主鍵時,如果這列之前沒有索引,系統會為其建立唯一性索引
  外來鍵作用:能保證設定外來鍵的列取值必須匹配父表中已有的值.通過外來鍵可以與同一張表的列建立引用關係,也可以與不同表的列建立引用關係

1.12.索引的優點和缺點是什麼?

參考答案:

索引的有點如下:
1.通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性;
2.可以大大加快資料的檢索速度,這也是建立索引的最主要的原因;
3.可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義;
4.在使用分組和排序子句進行資料檢索式,同樣可以顯著減少查詢中分組和排序的時間;
5.通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能.
索引的缺點如下:
1.建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加;
2.索引需要佔物理空間,除了資料表佔資料空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大;
3.當對錶中的資料進行增加,刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度;
4.如果給不適合建立索引的列建立了索引,不會提高效能.

1.13.主鍵和索引的區別?

參考答案:

1.主鍵時為了標識資料庫記錄唯一性,不允許記錄重複,且鍵值不能為空,主鍵也是一個特殊索引;
2.資料表中只允許有一個主鍵,但是可以有多個索引;
3.使用主鍵資料庫會自動建立主索引,也可以在非主鍵上建立索引,方便查詢效率;
4.索引可以提高查詢速度,它就相當於字典的目錄,可以通過它很快查詢到想要的結果,而不需要進行全表掃描;
5.主鍵也可以由多個欄位組成,組成複合主鍵,同時主鍵肯定也是唯一索引;
6.唯一索引則標識該索引值唯一,可以由一個或幾個欄位組成,一個表可以由多個唯一索引.

1.14.使用索引查詢一定能提高資料庫的效能嗎?為什麼?

參考答案:

不一定.
如果給不適合建立索引的列建立了索引, 不會提高效能.

1.15.什麼叫檢視?

參考答案:

  檢視(VIEW)是一個虛擬表,其內容由查詢定義.同真是的表一樣,檢視包含系列帶有名稱的列和行資料.但是,檢視並不在資料庫中以儲存的資料值集形式存在.行和列資料來自由定義檢視的查詢所引用的表,並且在引用檢視時動態生成.
  檢視在資料庫中不儲存資料值,即不佔空間.只在系統表中儲存對檢視的定義.
  檢視實際上就是一條SELECT語句,類似Windows中的快捷方式.

1.16.資料庫事務是什麼,並分別說明ACID

參考答案:

  事務,是指作為單個邏輯工作單元執行的一系列操作.事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源.通過將一組相關操作組合為一個要麼全部成功要麼全部失敗的單元,可以簡化錯誤恢復並使應用程式更加可靠.
  事務的四個特性ACID,分別表示:
  原子性(atomicity):一個事務或者完全發生,或者完全不發生;
  一致性(consistency):事務把資料庫從一個一致狀態轉變到另一個狀態;
  隔離性(isolation):在事務提交之前,其他事務覺察不到事務的影響;
  永續性(durability):一旦事務提交,它是永久的.

1.17.簡要敘述資料庫TRUNCATE,DROP,DELETE之間的區別

參考答案:

  1.TRUNCATE刪除表內容釋放表空間保留表結構(即:只刪除表內的資料,不刪除表本身.相當於DELETE語句不寫WHERE子句一樣),不適用事務處理即和事務無關.TRUNCATE刪除表內容,資料不可以回滾.DELETE後面可跟WHERE子句,TRUNCATE則不可以.TRUNCATE比DELETE的刪除資料的速度快.
  2.DELETE屬於資料操作語言(DML),不能自動提交事務,需commit提交.這個操作會放到rollback segement中,事務提交之後才生效;如果有相應的trigger,執行的時候將被觸發.
  DROP屬於資料定義語言(DDL)可以自動提交事務;DROP語句將刪除表的結構,依賴的約束(constraint),觸發器(trigger),索引(index);刪除表資料同時刪除表結構;依賴於該表的儲存過程/函式將保留,但是變為失效狀態.

1.18.儲存過程和觸發器的區別?

參考答案:

  儲存過程是SQL語句和可選控制流語句的預編譯集合,以一個名稱儲存並作為一個單元處理.儲存過程儲存在資料庫內,可由應用程式通過一個呼叫執行,而且允許使用者宣告變數,有條件自行以及其他強大的程式設計功能.儲存過程可包含程式流,邏輯以及對資料庫的查詢.它們可以接受引數,輸出引數,返回單個或多結果集以及返回值.可以出於任何使用SQL語句的目的來使用儲存過程,它具有以下優點:
  1.可以在單個儲存過程中執行一系列SQL語句.
  2.可以從自己的儲存過程內引用其它儲存過程,這可以簡化一系列複雜語句.
  3.儲存過程在建立時即在伺服器上進行編譯,所以執行起來比單個SQL語句快.
  觸發器是一種特殊型別的儲存過程,當使用下面的一種或多種資料修改操作在指定表中對資料進行修改時,觸發器會生效:UPDATE,INSERT,或DELETE.觸發器可以查詢其它表,而且可以包含複雜的SQL語句.它們主要用於強制複雜的業務規則或要求.例如,可以控制是否允許基於顧客的當前賬戶狀態插入訂單.觸發器還有助於強制引用完整性,以便在新增,更新或刪除表中的行時保留表之間已定義的關係.然而,強制引用完整性的最好方法是在相關表中定義主鍵和外來鍵約束.如果使用資料庫關係圖,則可以在表之間建立關係以自動建立外來鍵約束.
  觸發器的有點如下:
  1.觸發器是自動的:它們在對錶的資料做了任何修改(比如手工輸入或者應用程式採取的操作)之後即被啟用.
  2.觸發器可以通過資料庫中的相關表進行層疊更改.例如,可以在titles表的title_id列上寫入一個刪除觸發器,以使其他表中的各匹配行採取刪除操作.該觸發器用title_id列作為唯一鍵,在titleauthor,sales及roysched表中對各匹配進行定位.
  3.觸發器可以強制限制,這些限制比用CHECK約束所定義的更復雜.與CHECK約束不同的是,觸發器可以引用其它表中的列.例如,觸發器可以回滾試圖對價格低於10美元的書(儲存在titles表中)應用折扣(儲存在discounts表中)的更新.

1.19.儲存過程和函式的區別?

參考答案:

  儲存過程是使用者定義的一系列SQL語句的姐,涉及特定表或其它物件的任務,使用者可以呼叫儲存過程,而函式通常是資料庫已定義的方法,它接收引數並返回某種型別的值並且不涉及特定使用者表.具體區別如下:
  1.對於儲存過程來說可以返回引數,而函式只能返回值或者表物件.
  2.函式必須有返回值,儲存過程可有可無
  3.儲存過程一般是作為一個獨立的部分來執行,而函式可以作為查詢語句的一部分來呼叫.

1.20.資料庫中有以下資料:

    ID(pri)(Auto) name pass
     1            aaa  111
     2            bbb  222
     3            ccc  333
  • 1
  • 2
  • 3
  • 4

1.請用一條SQL語句將現有的三條記錄複製一下,達到以下的效果:

    ID(pri)(Auto) name pass
     1            aaa  111
     2            bbb  222
     3            ccc  333
     4            aaa  111
     5            bbb  222
     6            ccc  333
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.再用SQL語句刪除重複記錄.

參考答案:

  在MySQL資料庫中,建立測試表和測試資料,程式碼如下所示:

create table info(
    id int primary key AUTO_INCREMENT,
    name varchar(20),
    pass varchar(20)
);

insert into info(name,pass)values('aaa','111');
insert into info(name,pass)values('bbb','222');
insert into info(name,pass)values('ccc','222');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

  1.用一條SQL語句將現有的三條記錄複製一下,程式碼如下所示:

insert into info(name,pass) select name, pass from info;
  • 1

  2.刪除重複記錄的SQL語句如下所示:

create table tmp as select min(id) as col1 from info group by name,pass;
delete from info where id not in (select col1 from tmp);
drop table tmp;
  • 1
  • 2
  • 3

相關文章