ACID,是指在數據庫管理系統(DBMS)中事務所具有的四個特性:原子性(Atomicity)、一致性 (Consistency)、隔離性(Isolation,又稱獨立性)、持久性(Durability)。
在數據庫系統中,一個事務是指由一系列數據庫操作組成的一個完整的邏輯過程。例如銀行轉帳,從原賬戶扣除金額,以及向目標賬戶添加金額,這兩個數據 庫操作的總和構成一個完整的邏輯過程,不可拆分。這個過程被稱爲一個事務,具有ACID特性。ACID的概念在ISO/IEC 10026-1:1992文件的第四段內有所說明。
目錄[隱藏] |
[編輯] 四大特性
- 原子性:整個事務中的所有操作,要麼全部完成,要麼全部不完成,不可能停滯在中間某個環節。事務在執行過程中發生錯誤,會被回覆 (Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
- 一致性:在事務開始之前和事務結束以後,數據庫的完整性限制沒有被破壞。
- 隔離性:兩個事務的執行是互不干擾的,一個事務不可能看到其他事務運行時,中間某一時刻的數據。
- 持久性:在事務完成以後,該事務對數據庫所作的更改便持久地保存在數據庫之中,並不會被回覆。
延伸閱讀:數據完整性
強制數 據完整性可保證數據庫中數據的質量。
1.實體完 整性
實體完整性將行定義爲特定表的唯一實 體。
實體完整性通過 UNIQUE 索引、UNIQUE 約束或 PRIMARY KEY 約束,強制表的標識符列或主鍵的完整性。
2.域完整性
完整性指特定列的項的有效性。
您 可以強制域完整性限制類型(通過使用數據類型)、 限制格式(通過使用 CHECK 約束和規則) 或限制可能值的範圍(通過使用 FOREIGN KEY 約束、CHECK 約束、DEFAULT 定義、NOT NULL 定義和規則)。
3.引用完整性
輸入或刪除行時,引用完整性保留表之間定義的 關係。
在 SQL Server 中,引用完整性通過 FOREIGN KEY 和 CHECK 約束, 以外鍵與主鍵之間或外鍵與唯一鍵之間的關係爲基礎。引用完整性確保鍵值在所有表中一致。
這類一致性要求不引用不存在的值,如果一個鍵值發生更 改,則整個數據庫中,對該鍵值的所有引用要進行一致的更改。
強制引用完整性時,SQL Server 將防止用戶執行下列操作:
a. 在主表中沒有關聯行的情況下在相關表中添加或更改行。
b.在主表中更改值(可導致相關表中出現孤立行)。
c.在有匹配的相關行的 情況下刪除主表中的行。--這個特點可以保護你的一些重要表不被誤刪
--測試
if OBJECT_ID('tb1') is not null
drop table tb1
go
create table tb1 (a int primary key ,value int)
insert tb1 select 1,1
union select 2,23
union select 3,32
go
if OBJECT_ID('tb2') is not null
drop table tb2
go
create table tb2 (a int references tb1(a),value int)
insert tb2 select 1,4
go
--測試:向TB2中加入TB1中沒有的A值
insert tb2 select 6,4
/*INSERT 語句與FOREIGN KEY 約束"FK__tb2__a__2E1BDC42"衝突。該 衝突發生於數據庫"tempdb",表"dbo.tb1", column 'a'*/
--測試:刪除TB1中的a值爲的行,使TB2中值爲的行孤立
delete tb1 where a=1
/*INSERT 語句與FOREIGN KEY 約束"FK__tb2__a__2E1BDC42"衝突。該 衝突發生於數據庫"tempdb",表"dbo.tb1", column 'a'*/
--測試:假設我們的TB1非常重要,而設置了TB2作爲它的外表,這樣可以起到保護TB1被誤刪的可能
drop table tb1
/*無法刪除對象'tb1',因爲該對象正由一個FOREIGN KEY 約束引用*/