數據庫小知識點

元組是關係數據庫中的基本概念,關係是一張表, 表中的每行(即數據庫中的每條記錄)就是一個元組 ,每列就是一個屬性。 在二維表裏,元組也稱爲記錄。


要刪除表A中數據,使用TRUNCATE TABLE A。運行結果是表A中的約束依然存在!

刪除表的語句爲:DROP TABLE table_name;

而DELETE和TRUNCATE TABLE都是刪除表中的數據的語句,它們的不同之處在於:

1、TRUNCATE TABLE比DELETE的速度快;

2、TRUNCATE TABLE 是刪除表的所有行,而DELETE是刪除表的一行或者多行(除非DELETE不帶WHERE語句);

3、在刪除時如果遇到任何一行違反約束(主要是外鍵約束),TRUNCATE TABLE仍然刪除,只是表的結構

及其列、約束、索引等保持不變,但DELETE是直接返回錯誤;

4、對於被外鍵約束的表,不能使用TRUNCATE TABLE,而應該使用不帶WHERE語句的DELETE語句。

5、如果想保留標識計數值,要用DELETE,因爲TRUNCATE TABLE會對新行標誌符列搜用的計數值重置爲該列的種子。


1. TRUNCATE TABLE 在功能上與不帶 Where 子句的 Delete 語句相同:二者均刪除表中的全部行。

但 TRUNCATE TABLE 比 Delete 速度快,且使用的系統和事務日誌資源少。

2. Delete 語句每次刪除一行,並在事務日誌中爲所刪除的每行記錄一項。TRUNCATE TABLE 通過釋放

存儲表數據所用的數據頁來刪除數據,並且只在事務日誌中記錄頁的釋放。 

3. TRUNCATE TABLE 刪除表中的所有行,但表結構及其列、約束、索引等保持不變。新行標識所用的

計數值重置爲該列的種子。如果想保留標識計數值,請改用 Delete。

4. 速度,一般來說: drop> truncate > delete

5.  想保留表而將所有數據刪除. 如果和事務無關,用truncate即可. 如果和事務有關,或者想觸發trigger,還是用delete.  


1NF:原子性 字段不可再分,否則就不是關係數據庫; 

2NF:唯一性 一個表只說明一個事物; 

3NF:每列都與主鍵有直接關係,不存在傳遞依賴;


1) 概念:

   數據庫是一個多用戶使用的共享資源。當多個用戶併發地存取數據時,在數據庫中就會產生多個事務同時

   存取同一數據的情況。若對併發操作不加控制就可能會讀取和存儲不正確的數據,破壞數據庫的一致性。

加鎖是實現數據庫併發控制的一個非常重要的技術。當事務在對某個數據對象進行操作前,先向系統發出請求,

對其加鎖。加鎖後事務就對該數據對象有了一定的控制,在該事務釋放鎖之前,其他的事務不能對此數據對象進

行更新操作。

(2) 鎖的分類:

共享(S)鎖:多個事務可封鎖一個共享頁;任何事務都不能修改該頁; 通常是該頁被讀取完畢,S鎖立即被釋放。 

排它(X)鎖:僅允許一個事務封鎖此頁;其他任何事務必須等到X鎖被釋放才能對該頁進行訪問;X鎖一直到事務結束才能被釋放。 

更新(U)鎖:更新鎖在修改操作的初始化階段用來鎖定可能要被修改的資源,這樣可以避免使用共享鎖造成的死

鎖現象。因爲使用共享鎖時,修改數據的操作分爲兩步,首先獲得一個共享鎖,讀取數據,然後將共享鎖升級爲

排它鎖,然後再執行修改操作。這樣如果同時有兩個或多個事務同時對一個事務申請了共享鎖,在修改數據的

時候,這些事務都要將共享鎖升級爲排它鎖。這時,這些事務都不會釋放共享鎖而是一直等待對方釋放,這樣就

造成了死鎖。如果一個數據在修改前直接申請更新鎖,在數據修改的時候再升級爲排它鎖,就可以避免死鎖。

(3) 鎖的粒度:

在sql server2000中鎖是具有粒度的,即可以對不同的資源加鎖。鎖定在較小的粒度的資源(例如行)上可以

增加系統的併發量但需要較大的系統開銷,從而也會影響系統的性能,因爲鎖定的粒度較小則操作可能產生的

鎖的數量會增加;鎖定在較大的粒度(例如表)就併發而言是相當昂貴的,因爲鎖定整個表限制了其它事務

對錶中任意部分進行訪問,但要求的開銷較低,因爲需要維護的鎖較少,所以在這裏是一種互相制約的關係。

 Sql server2000中鎖定的粒度包括 行、頁、擴展盤區、表、庫等資源。


 數據完整性可以分爲四類。

1、實體完整性,實體完整性的目的是確保數據庫中所有實體的唯一性,也就是不應出現完全相同的數據記錄。

2、區域完整性,匹配完整性要求數據表中的數據位於某一個特定的允許範圍內。

3、參考完整性,是用來維護相關數據表之間數據一致性的手段,通過實現參考完整性,可以避免因一個數據

表的記錄改變而造成另一個數據表內的數據變成無效值。

4、用戶自定義完整性,用戶自定義由用戶根據實際應用中的需要自行定義。

引用完整性通過主鍵和外鍵之間的引用關係實現 如果兩個表中存儲的信息相互關聯,那麼只要修改了一個表,

另外一個表也要做出相應的修改,則稱該這兩個表中的數據具備完整性


BEGIN或START TRANSACTION;顯示地開啓一個事務;

COMMIT;也可以使用COMMIT WORK,不過二者是等價的。COMMIT會提交事務,並使已對數據庫進行的所有修改稱

爲永久性的;

ROLLBACK;有可以使用ROLLBACK WORK,不過二者是等價的。回滾會結束用戶的事務,並撤銷正在進行的所有未提交的修改;

SAVEPOINT identifier;SAVEPOINT允許在事務中創建一個保存點,一個事務中可以有多個SAVEPOINT;

RELEASE SAVEPOINT identifier;刪除一個事務的保存點,當沒有指定的保存點時,執行該語句會拋出一個異常;

ROLLBACK TO identifier;把事務回滾到標記點;

SET TRANSACTION;用來設置事務的隔離級別。InnoDB存儲引擎提供事務的隔離級別有READ UNCOMMITTED、

                 READ COMMITTED、REPEATABLE READ和SERIALIZABLE。

   在mysql命令行的默認下,事務都是自動提交的,sql語句提交後馬上會執行commit操作。

   因此開啓一個事務必須使用begin,start transaction,或者執行 set autocommit=0;可以使用的事務控制語句

start transction | begin : 顯示的開啓一個事務


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