在一張表中,組成表的每個屬性都是不能再分的屬性,若是知足這一規則,則該表符合第一範式。mysql
表1(不符合) 表2(符合)sql
表1的Info字段能夠再拆分,故不符合1NF;表2全部屬性不可再分,符合。數據庫
首先要知足1NF,表中的每個非主屬性必須徹底依賴於本表的主鍵(候選鍵),而不能是部分依賴。併發
表1 表2atom
表1中,學號和課程爲聯合主鍵,因爲姓名屬性只依賴於學號,學分只依賴於課程,故不知足2NF;表2中,選修時間及成績都徹底依賴於主鍵,故符合2NF。由此也可知不知足2NF的狀況只會出如今有聯合主鍵的表中。spa
首先知足1NF和2NF,另外全部非主屬性都是與主鍵直接相關,而不能是間接相關3d
表1blog
表1中,客戶名稱與訂單號並非直接相關,而是能夠經過客戶號與訂單號間接相關,故不知足3NF事務
一、 Primary key:主鍵約束內存
二、 UNIQUE:惟一性約束
三、 NOT NULL:非空約束
四、 Foreign key:外鍵約束
五、 Default:默認值約束
一、 原子性(atomicity):一個事務是不可分割的,因此要麼執行其所有內容,要麼就根本不執行。若是一個事務開始執行,可是因爲某些緣由失敗了,則事務對數據庫形成的任何可能的修改都要撤銷。
二、 一致性(consistency):一個事務做爲原子從一個一致的數據庫狀態開始獨立運行,則事務結束時數據庫也必須是再次是一致的。好比,在轉帳以前 A + B = 500,那麼在轉帳以後也應是A + B = 500。
三、 隔離性(isolation):多個併發執行的事務間互不干擾。
四、 持久性(durability):事務一旦提交,數據庫中的數據的改變是永久的,即便數據庫出現故障。
一、 髒讀:兩個併發事務,事務T2讀取了事務T1未提交的數據。以下圖,事務T1還沒有提交,這時事務T2進來讀取了x的值,可是事務T1最終可能不提交而是進行了回滾,這樣T2就讀取了無效的x。
二、 不可重複讀:在事務內存在屢次讀取某變量的操做,可是先後讀取的值不同。以下圖,事務T2存在兩次讀取x的操做,可是有可能在第一次讀取完的時候,T1事務執行把x值修改,T2再次讀取x的值就與第一次讀取的結果不同。
三、 幻讀:在某個事務內先後執行了相同的操做(如查詢結果集),但獲得的結果集不同。以下圖,T1在T2執行的過程當中進行了插入操做,致使T2先後查詢結果不一致。
一、 可串行化(serializable):最高隔離級別,一般保證可串行化調度,可避免髒讀、不可重複讀和幻讀的發生。讀時加表級共享鎖,事務結束釋放;更新時加表級排他鎖,事務結束後釋放。
二、 可重複讀(repeatable read):可避免髒讀、不可重複讀。讀時加行級共享鎖,直到事務結束釋放;更新時加排他鎖,直到事務結束後釋放。(mysql默認隔離級別)
三、 已提交讀(read committed):可避免髒讀。讀時加行級共享鎖,讀完釋放;更新時加行級排他鎖,事務結束後釋放。
四、 未提交讀(read uncommitted):最低隔離級別,容許讀取未提交數據。更新時加排他鎖,更新完釋放。