數據庫中的概念小點

1 drop、delete與truncate的區別

SQL中的drop、delete、truncate都表示刪除,但是三者有一些差別

  1. delete和truncate只刪除表的數據不刪除表的結構
  2. 速度,一般來說: drop> truncate >delete
  3. delete語句是dml,數據刪除可以回滾;truncate,drop是ddl,數據刪除後不能回滾

使用場景:

不再需要一張表的時候,用drop
想刪除部分數據行時候,用delete,並且帶上where子句
保留表而刪除所有數據的時候用truncate

2 什麼是主鍵?什麼是外鍵?並說出它們的作用

主鍵:唯一標識一條記錄,不能有重複的,不允許爲空
外鍵:表的外鍵是另一表的主鍵, 外鍵可以有重複的, 可以是空值

作用:
主鍵:用來保證數據完整性,保證記錄的唯一性
外鍵:通過設置外鍵和其他表建立關聯關係(一對一,一對多,多對多)

3 說出char和varchar的區別,及它們的適用場景 是什麼:char是一種固定長度的字符串類型,varchar是一種可變長度的字符串類型;

適用場景:
char一般用來存儲長度固定字段,如:手機號,身份證號等
varchar一般用來存儲不固定長度的字段:如:用戶名,暱稱等
4 說出不小於3種mysql數據庫支持的約束,並說明它們的使用場景 1. 主鍵約束:在主鍵上使用
2. 外鍵約束:建立倆個表之間的關係時使用
3. 唯一約束:保證數據表中某個字段數據的唯一性時使用
4. 非空約束:需要保證數據庫字段值不爲空時使用
5. 自動增長列:數據值自增,需要和用在主鍵列上

5 說出5種SQL中常用的聚合函數,並說明它們的作用

  1. avg():返回指定組中的平均值,空值被忽略;
  2. count():返回指定組中的項目個數
  3. max():返回指定數據中的最大值;
  4. min():返回指定數據中的最小值;
  5. sum():返回指定數據的和,只能用於數字列,空值忽略;

6 說出SQL中內連接、左連接、右連接的區別 內連接:顯示錶之間連接匹配的所有行

左連接(左外連接):以左表作爲基準進行查詢,左表數據會全部顯示出來,右表如果和左表匹配的數據則顯示相應字段的數據,如果匹配則顯示爲null

右連接(右外連接):以右表作爲基準進行查詢,右表數據會全部顯示出來,左表如果和右表匹配的數據則顯示相應字段的數據,如果匹配則顯示爲null

7 談談數據庫連接池的作用 概念:

數據庫連接池是程序啓動時建立足夠的數據庫連接,並將這些連接組成一個連接池,由程序動態地對池中的連接進行申請,使用,釋放。
作用:
1.資源重用,避免了數據庫連接頻繁建立、關閉的開銷
2.更快的系統響應速度,直接從連接池中獲取連接,響應速度加快
3.控制資源的使用。如果不使用連接池,每次訪問數據庫都需要創建一個連接,這樣系統的穩定性受系統連接需求影響很大,很容易產生資源浪費和高負載異常。連接池能夠使性能最大化,將資源利用控制在一定的水平之下。連接池能控制池中的連接數量,增強了系統在大量用戶應用時的穩定性。
常用的數據庫連接池:DBCP、C3P0、Druid

池化技術(擴展):
簡單點來說,就是提前保存大量的資源,以備不時之需。

對於線程,內存,數據庫的連接對象等等,這些都是資源,程序中當創建一個線程或者在堆上申請一塊內存時,都涉及到很多系統調用,也是非常消耗CPU的,如果程序需要很多類似的工作線程或者需要頻繁的申請釋放小塊內存,如果沒有在這方面進行優化,那很有可能這部分代碼將會成爲影響整個程序性能的瓶頸。

池化技術主要有線程池,內存池,數據庫連接池,對象池等等,

對象池就是提前創建很多對象,將用過的對象保存起來,等下一次需要這種對象的時候,再拿出來使用,使用完成之後再交還保存,使得可以被重複使用

8 數據庫有100條數據,怎麼查詢第50,51條 MySQL的limit用法:

select * from table limit m,n
其中m是指記錄開始的index,從0開始,表示第一條記錄
n是指從第m+1條開始,取n條。

從索引49開始,查詢2條數據:select * from table_name limit 49, 2

9 什麼是數據庫事務

事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。例如,銀行轉賬工作:從一個賬號扣款並使另一個賬號增款,這兩個操作要麼都執行,要麼都不執行

10 數據庫事務的四大特性

Atomic(原子性):事務中包含的操作被看做一個邏輯單元,這個邏輯單元中的操作要麼全部成功,要麼全部失敗(減款,增款必須一起完成)。
Consistency(一致性):只有合法的數據可以被寫入數據庫,否則事務應該將其回滾到最初狀態。事務的運行並不改變數據的一致性.例如,完整性約束了a+b=10,一個事務改變了a,那麼b也應該隨之改變。
Isolation(隔離性):事務允許多個用戶對同一個數據進行併發訪問,而不破壞數據的正確性和完整性。同時,並行事務的修改必須與其他並行事務的修改相互獨立。
Durability(持久性):事務完成之後,它對於 系統的影響是永久的,該修改即使出現系統故障也將一直保留,真實的修改了數據庫

11 事務併發訪問會產生的問題

髒讀:一個事務讀取到了另一個事務中尚未提交的數據
不可重複讀:一個事務中兩次讀取的數據內容不一致,要求的是一個事務中多次讀取時數據是一致的,這是事務update時引發的問題
幻讀:一個事務中兩次讀取的數據的數量不一致,要求在一個事務多次讀取的數據的數量是一致的,這是insert或delete時引發的問題

12 事務的四種隔離級別 事務隔離級別

                                                                    髒讀       不可重複讀         幻讀

讀未提交(read-uncommitted) 是 是 是
讀已提交(read-committed) 否 是 是
可重複讀(repeatable-read) 否 否 是
串行化(serializable) 否 否 否

讀未提交:最低級別,任何情況都無法保證;
讀已提交:可避免髒讀的發生;
可重複讀:可避免髒讀、不可重複讀的發生;
串行化:串行化(Serializable) 提供最嚴格的事務隔離。 這個級別模擬串行的事務執行, 就好象事務將被一個接着一個那樣串行的,而不是並行的執行。可避免髒讀、不可重複讀、幻讀的發生

13 MySQL是怎麼管理事務的 MYSQL 事務處理主要有兩種方法:

1、用 BEGIN, ROLLBACK, COMMIT來實現

BEGIN 開始一個事務
ROLLBACK 事務回滾
COMMIT 事務確認
2、直接用 SET 來改變 MySQL 的自動提交模式:

SET AUTOCOMMIT=0 禁止自動提交
SET AUTOCOMMIT=1 開啓自動提交

14 談談對事務的保存點理解

在事務的處理過程中,如果發生錯誤並且使用rollback進行回滾,那麼整個事務對數據庫的操作都將被撤銷,在一個龐大的事務中,這是很浪費資源的,比如事務前半部分是正確的,事務的後半部分是錯誤的,那麼我想回滾到前半部分結束位置,這時就可以使用保存點。
事務的回滾點有什麼作用?類似於單機遊戲的存檔和讀檔:
1、如果沒有遊戲的存檔功能,每次玩單機遊戲都會從第一關重新開始。
2、如果使用了遊戲的存檔功能,下次在玩遊戲時,就會從存檔處開始。

15 數據庫去重

distinct,藉助group by也可以進去去重:GROUP BY [去除重複的字段名列表,…]

16 group by 的注意事項

1.在SELECT 列表中所有未包含在聚合函數中的列都應該包含在 GROUP BY 子句中,除非對這一列使用了聚合函數(avg/sum/count…)。
如:有部門表和員工表,員工表根據部門id進行分組查詢,那麼select 不能跟*,應該跟部門id或者聚合函數
2.不能Group By非標量基元類型的列,如不能Group By text,image或bit類型的列;
3.進行分組前可以使用Where子句消除不滿足條件的行;
4.使用Group By子句返回的組沒有特定的順序,可以使用Order By子句指定次序。

17 什麼是索引?

索引是一種獨立於表的數據庫對象,可以存儲在於表不同的磁盤中間或表空間;索引相當於字典的目錄,作用在於提升查詢效率,降低磁盤讀寫,提升數據庫性能。

18 索引的分類 1. 直接創建索引和間接創建索引:

自動創建--------即在創建主鍵 primarykey 或唯一性約束 unique 的時候,數據庫會自動在相應的列上創建唯一性索引
手動創建--------即在不唯一的列上創建非唯一的索引,加速查詢效率
2. 普通索引和唯一性索引
3. 單一索引和複合索引
參考:https://blog.csdn.net/csdn265/article/details/51889508
單一索引:即在單列上建立索引
複合索引:又叫組合索引,在索引建立語句中同時包含多列
4. 聚簇索引和非聚簇索引
參考:https://blog.csdn.net/zc474235918/article/details/50580639

19 索引的優缺點 索引的優點:

  1. 通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性;
  2. 可以大大加快數據的檢索速度,這也是創建索引的最主要的原因;
    索引的缺點:
  3. 創建索引和維護索引要耗費時間,這種時間隨着數據量的增加而增加;
  4. 索引需要佔物理空間,除了數據表佔數據空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大;
  5. 當對錶中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度

20 什麼情況應該使用索引?什麼情況下又不應該使用?

適用場景:

  1. 在經常查詢的列上面創建索引,加快條件的判斷速度;
  2. 在作爲主鍵的列上,強制該列的唯一性和組織表中數據的排列結構;
  3. 在經常用在連接的列上,這 些列主要是一些外鍵,可以加快連接的速度;
  4. 在經常需要排序的列上創 建索引,因爲索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;

不適用場景:

  1. 對於那些在查詢中很少使用或者參考的列不應該創建索引,這是因 爲,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求
  2. 對於那 些只有很少數據值的列也不應該增加索引,這是因爲,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的數據行佔了表中數據行的很大比例,即需要在表中搜索的數據行的比例很大。增加索引,並不能明顯加快檢索速度。
  3. 對於那些定義爲text, image和bit數據類型的列不應該增加索引。這是因爲,這些列的數據量要麼相當大,要麼取值很少。
  4. 當修改性能遠遠大於檢索性能時,不應該創建索 引。這是因爲,修改性能和檢索性能是互相矛盾的。當增加索引時,會提高檢索性能,但是會降低修改性能。當減少索引時,會提高修改性能,降低檢索性能。因 此,當修改性能遠遠大於檢索性能時,不應該創建索引。

21 主鍵(primary key)和唯一索引(unique index)區別 https://blog.csdn.net/qq_26222859/article/details/52469504

22 什麼是視圖?

  1. 視圖 : 視圖是一種數據庫對象,是從一個或者多個數據表或視圖中導出的虛表,視圖所對應的數據並不真正地存儲在視圖中,而是存儲在所引用的數據表中,視圖的結構和數據是對數據表進行查詢的結果。視圖其實就是存儲在數據庫中的查詢的SQL 語句
  2. 根據創建視圖時給定的條件,視圖可以是一個數據表的一部分,也可以是多個基表的聯合
  3. 基表: 用來創建視圖的表叫做基表 base table

23 表和視圖的關係 聯繫:

視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關係。

區別:
1、視圖是已經編譯好的sql語句;而表不是。
2、視圖沒有實際的物理記錄;而表有。
3、視圖是窗口;表是內容
4、標緻用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在;表可以即使對它修改,但視圖只能有創建的語句來修改。
5、表示內模式,視圖是外模式。
6、視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,只是一些sql語句的集合。從安全的角度來說,視圖可以不給用戶接觸數據表,從而不知道表結構。
7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。
8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。

24 mysql查詢條件裏如何拼接字符串

CONCAT(string1,string2,…)
說明 : string1,string2代表字符串,concat函數在連接字符串的時候,只要其中一個是NULL,那麼將返回NULL

25 列舉幾種表連接方式, 有什麼區別?

1.交叉連接:沒有where條件的交叉連接將產生連接表所涉及的笛卡爾積
2.左右外連接:左連接以左表爲基表 右表爲從表 基表全部展示 從表數據對應匹配條件進行展示
3.內連接:是比較運算符比較要連接的列的值的連接 不匹配的行不會被顯示
4.全外連接:左表記錄全部展示,右表沒有則顯示爲null;右表記錄全部展示,左表沒有則顯示爲null

26 having是什麼

having關鍵字通常是與group by關鍵字聯合使用 用於過濾group by 語句返回的結果集 having關鍵字彌補了where關鍵字不能與聚合函數聯合使用的不足

27 在數據庫中查詢語句速度很慢,如何優化? https://blog.csdn.net/jie_liang/article/details/77340905

https://blog.csdn.net/yzllz001/article/details/54848513

28 union和union all有什麼不同?

UNION和UNION ALL關鍵字都是將兩個結果集合併爲一個,但這兩者從使用和效率上來說都有所不同。
1、對重複結果的處理:UNION在進行錶鏈接後會篩選掉重複的記錄,Union All不會去除重複記錄。
2、對排序的處理:Union將會按照字段的順序進行排序;UNION ALL只是簡單的將兩個結果合併後就返回。
從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複數據且不需要排序時的話,那麼就使用UNION ALL。

29 在數據庫中你怎麼把時間進行格式化

例如使用 DATE_FORMAT(time,’%Y-%m-%d’)

30 count(*)和count(1)的效率哪個更高?

count(*)和count(1)無任何差別,永遠優於其他count,無論加不加任何索引
加索引顯著快於不加索引
主鍵索引快於普通索引
沒有索引時,與列含不含空值無關
參考:https://blog.csdn.net/moni_mm/article/details/82056021

31 count(*)和count(1)的結果一樣嗎? 一樣

32 超鍵、候選鍵、主鍵、外鍵分別是什麼?

超鍵:在關係模式中,能唯一標識元組的屬性集稱爲超鍵。
候選鍵 :如果一個屬性集能唯一標識元組,且有不包含多餘屬性,那麼這個屬性集稱爲候選鍵;也即:候選鍵是沒有多餘屬性的超鍵。
主鍵:關係模式中用戶正在使用的候選鍵稱主鍵(primary key)
外鍵:在關係模式R中,如果某屬性集是其他模式的候選鍵,那麼該屬性集對模式R來說就是外鍵。
參考:https://blog.csdn.net/fjxcsdn/article/details/76549751

33 數據庫圖形化工具的好處

可以直觀的操作數據 查看數據,可以藉助圖形化界面輕鬆完成對數據庫的各種操作

34 你做過那些Mysql數據庫優化

1.使用索引
2.使用連接(JOIN)來代替子查詢(Sub-Queries)
3.選取最適用的字段屬性
4.優化的查詢語句
5.使用聯合(UNION)來代替手動創建的臨時表
https://blog.csdn.net/seudongnan/article/details/57086633
https://www.jb51.net/article/18934.htm

35 數據庫主鍵,不設置主鍵會怎麼樣

1.主鍵用於表示數據(記錄)的唯一性, 不設置主鍵會導致數據表中可能存在完全相同的數據;
2.一個表的外鍵必須是另一個表的主鍵,不設置主鍵將無法建立倆個表之間的關聯關係;
3.設置主鍵時,會自動增加索引,有利於提高數據的檢索速度;

36 MySQL的數據引擎有了解嗎?

MySQL 的插件式存儲引擎主要包括MyISAM,Innodb,NDB Cluster,Maria,Falcon,Memory,Archive,Merge,Federated 等,其中最著名而且使用最爲廣泛的MyISAM 和Innodb兩種存儲引擎。
MyISAM擁有較高的插入、查詢速度,但不支持事物;
InnoDB是事務型數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵,上圖也看到了,InnoDB是默認的MySQL引擎。
兩種類型最主要的差別就是Innodb 支持事務處理與外鍵和行級鎖。
https://blog.csdn.net/zhangyuan19880606/article/details/51217952
https://blog.csdn.net/xifeijian/article/details/20316775

使用distinct和分組group by 哪個效率跟高?(實現去重效果)
Mysql如何自定義函數?
數據庫三範式是什麼 ( 1至6範式分別是什麼? ) http://kimi.it/category/mysql/
什麼是存儲過程
存儲過程的優缺點?

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