1. 程式人生 > >資料庫儲存,索引,事務常見問題

資料庫儲存,索引,事務常見問題

1.什麼是儲存過程?有哪些優缺點?

儲存過程是一些預編譯的SQL語句(儲存過程(Stored Procedure)是一組為了完成某種特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者通過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它)。

1)儲存過程是預編譯過的,執行效率高。2)儲存過程的程式碼直接存放於資料庫中,通過儲存過程名直接呼叫,減少網路通訊。

3)安全性高,執行儲存過程需要有一定許可權的使用者。4)儲存過程可以重複使用,可減少資料庫開發人員的工作量。

2.索引是什麼?有哪些優缺點?

索引(Index)是幫助MySQL高效獲取資料的資料結構;在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用(指向)資料,可以在這些資料結構上實現高階查詢演算法,提高查詢速度,這種資料結構,就是索引。索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃描整個資料庫。

索引就一種特殊的查詢表,資料庫的搜尋可以利用它加速對資料的檢索。它很類似與現實生活中書的目錄,不需要查詢整本書內容就可以找到想要的資料。索引可以是唯一的,建立索引允許指定單個列或者是多個列。缺點是它減慢了資料錄入的速度,同時也增加了資料庫的尺寸大小

什麼樣的欄位適合建索引

唯一、不為空、經常被查詢的欄位

 

MySQL資料庫幾個基本的索引型別:普通索引、唯一索引、主鍵索引、全文索引

  • 索引加快資料庫的檢索速度
  • 索引降低了插入、刪除、修改等維護任務的速度
  • 唯一索引可以確保每一行資料的唯一性
  • 通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的效能
  • 索引需要佔物理和資料空間 

普通索引 這是最基本的索引型別,而且它沒有唯一性之類的限制,可以通過以下幾種方式建立: 

(1)建立索引: CREATE INDEX 索引名 ON 表名(列名1,列名2,…); 

(2)修改表: ALTER TABLE 表名 ADD INDEX 索引名 (列名1,列名2,…); 
(3)建立表時指定索引:CREATE TABLE 表名 ( […], INDEX 索引名 (列名1,列名 2,…) );

 UNIQUE索引 表示唯一的,不允許重複的索引,若某一欄位的資訊不能重複(例如身份證號),可以將該欄位的索引設定為unique:

 

(1)建立索引:CREATE UNIQUE INDEX 索引名 ON 表名(列名1,列名2,…); 

(2)修改表:ALTER TABLE 表名ADD UNIQUE 索引名 (列名1,列名2,…); 
(3)建立表時指定索引:CREATE TABLE 表名( […], UNIQUE 索引名 (列名1,列名2,…)); 
主鍵:PRIMARY KEY索引 
主鍵是一種唯一性索引,但它必須指定為“PRIMARY KEY”。可以將其理解為 索引名固定為 PRIMARY KEY 的 UNIQUE索引。 
(1)主鍵一般在建立表的時候指定:“CREATE TABLE 表名( […], PRIMARY KEY (列的列表) ); ”。 
(2)但是,我們也可以通過修改表的方式加入主鍵:“ALTER TABLE 表名 ADD PRIMARY KEY (列的列表); ”。 
每個表只能有一個主鍵。 (主鍵相當於聚合索引,是查詢最快的索引) 
注:不能用CREATE INDEX語句建立PRIMARY KEY索引

 

3.什麼是事務

事務(Transaction)是併發控制的基本單位。所謂的事務,它是一個操作序列,這些操作要麼都執行,要麼都不執行,它是一個不可分割的工作單位。事務是資料庫維護資料一致性的單位,在每個事務結束時,都能保持資料一致性。

事務就是被繫結在一起作為一個邏輯工作單元的SQL語句分組,如果任何一個語句操作失敗那麼整個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。為了確保要麼執行,要麼不執行,就可以使用事務。要將有組語句作為事務考慮,就需要通過ACID測試,即原子性,一致性,隔離性和永續性。 鎖:在所以的DBMS中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和併發性。與現實生活中鎖一樣,它可以使某些資料的擁有者,在某段時間內不能使用某些資料或資料結構。當然鎖還分級別的。

一般來說,事務是必須滿足4個條件(ACID)::原子性(Atomicity,或稱不可分割性)、一致性(Consistency)、隔離性(Isolation,又稱獨立性)、永續性(Durability)。

  • 原子性:一個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。

  • 一致性:在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。

  • 隔離性:資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和序列化(Serializable)。

  • 永續性:事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失。

 

 

 

 

 

缺點:移植性差