1 定義 數據完整性用於保證數據庫中數據的正確性、一致性和可靠性。 2 類型 • 實體完整性(Entity Integrity) • 域完整性(Domain Integrity) • 參照完整性(Referential Integrity) • 用戶定義完整性(User-defined Integrity) 圖示html
實體完整性(Entity Integrity) 實體完整性用於保證數據庫中數據表的每個特定實體的記錄都是惟一的 。數據庫
約束種類 功能描述 PRIMARY KEY(主鍵)約束 惟一識別每一條記錄的標誌,能夠有多列共同組成 IDENTITY(自增)約束 列值自增,通常使用此屬性設置的列做爲主鍵 UNIQUE(惟一)約束 可使用UNIQUE約束確保在非主鍵列中不存在重複值,但列值能夠是NULL(空)express
域完整性(Domain Integrity) 域完整性是指保證指定列的數據具備正確的數據類型、格式和有效的數據範圍。ide
CHECK(檢查)約束 用於限制列中值得範圍 FOREIGN KEY(外鍵) 一個表中的FORENIGN KEY 指向另外一個表中的PRIMARY KEY DEFAULT(默認值)約束 用於向列中插入默認值 NOT NULL(非空)約束 用於強制列不接受NULL(空)值函數
參照完整性(Referential Integrity) 當增長、修改或刪除數據庫表中記錄時,能夠藉助參照完整性來保證相關聯表之間數據的一致性 。 用戶定義完整性 (User- defined Integrity) 這是由用戶定義的完整性。用戶定義完整性能夠定義不屬於其餘任何完整性分類的特定業務規則 。性能
注意: 一、PRIMARY KEY用於將表中的某類設置爲主鍵,一張表中只有一個主鍵,主鍵能夠是一列或由多列組成。 二、NOT NULL是對列值進行限制,即在表中添加數據時不容許有NULL值。 三、CHECK約束的語法規則:CHECK(表達式) 外鍵的使用:字段名 數據類型 [FOREIGN KEY] REFERENCES 表名(字段名).net
===================================htm
3 數據完整性的實現方式blog
聲明數據完整性和過程數據完整性 (1)使用IDENTITY(標識符)列 語法格式: CREATE TABEL 數據表名 (列名 列數據類型 IDENTITY [(種子, 增量)] [,…]) 說明:標識種子爲標識列的起始值,標識遞增量爲每次增長的數,兩者的默認值均爲1。 (2)使用IDENTITY函數 語法格式: IDENTITY ( 數據類型 [ , 種子 , 遞增量 ] ) AS 列名 說明:只用在帶有 INTO table 子句的 SELECT 語句中,能夠將標識列插入到新表中。 儘管相似,可是 IDENTITY 函數不是與 CREATE TABLE 和 ALTER TABLE 一塊兒使用的 IDENTITY 屬性。索引
完整性類型 約束類型 描述 域 DEFAULT 指定列的默認值 CHECK 指定列的容許值 FOREIGN KEY 指定必須存在值的列 NULL 指定是否容許爲NULL 實體 PRIMARY KEY 惟一標識每一行 UNIQUE 防止非主鍵重複 引用 FOREIGN KEY 定義值與同一個表或另外一個表的主鍵值匹配的一列或多列組合 CHECK 指定根據同一個表中其餘列的值可在列中接受的數據值
在SQL SERVER中,對於基本表的約束分爲列約束和表約束。 完整性約束的基本語法格式爲: [CONSTRAINT constraint_name(約束名)] <約束類型> 約束不指定名稱時,系統會給定一個名稱。 在SQL Server 2005中有6種約束:主鍵約束(primary key constraint)、唯一性約束(unique constraint)、檢查約束(check constraint)、默認約束(default constraint)、外部鍵約束(foreign key constraint)和空值(NULL)約束。 PRIMARY KEY 約束 PRIMARY KEY約束用於定義基本表的主鍵,它是唯一肯定表中每一條記錄的標識符,其值不能爲NULL,也不能重複,以此來保證明體的完整性。PRIMARY KEY與UNIQUE約束相似,經過創建惟一索引來保證基本表在主鍵列取值的惟一性,但它們之間存在着很大的區別: ①一個表只能有一個 PRIMARY KEY 約束 ,但可定義多個UNIQUE約束; ②對於指定爲PRIMARY KEY的一個列或多個列的組合,其中任何一個列都不能出現空值,而對於UNIQUE所約束的惟一鍵,則容許爲空。 注意:不能爲同一個列或一組列既定義UNIQUE約束,又定義PRIMARY KEY約束; PRIMARY KEY既可用於列約束,也可用於表約束。 (2)使用Transact-SQL語句操做法設置主鍵約束,其語法形式以下: PRIMARY KEY
CONSTRAINT constraint_name PRIMARY KEY ( column_name ) 舉例:創建一個SC表,定義SNO,CNO共同組成SC的主鍵 程序清單以下: create table sc( sno char(5) not null, cno char(5) not null, score numeric (3), constraint sc_prim primary key(sno,cno) ) UNIQUE約束 唯一性約束用於指定一個或者多個列的組合值具備唯一性,以防止在列中輸入重複的值。定義了UNIQUE約束的那些列稱爲惟一鍵,系統自動爲惟一鍵創建惟一索引,從而保證了惟一鍵的惟一性。 當使用唯一性約束時,須要考慮如下幾個因素: • 使用唯一性約束的字段容許爲空值; • 一個表中能夠容許有多個唯一性約束; • 能夠把唯一性約束定義在多個字段上; • 唯一性約束用於強制在指定字段上建立一個唯一性索引; • 默認狀況下,建立的索引類型爲非彙集索引。 使用Transact-SQL語句完成唯一性約束的操做,其語法形式以下: • UNIQUE • CONSTRAINT constraint_name UNIQUE ( column_name ) CHECK 約束 檢查約束對輸入列或者整個表中的值設置檢查條件,以限制輸入值,保證數據庫數據的完整性。 當使用檢查約束時,應該考慮和注意如下幾點: • 一個列級檢查約束只能與限制的字段有關;一個表級檢查約束只能與限制的表中字段有關; • 一個表中能夠定義多個檢查約束; • 每一個CREATE TABLE語句中每一個字段只能定義一個檢查約束; • 在多個字段上定義檢查約束,則必須將檢查約束定義爲表級約束; • 當執行INSERT語句或者UPDATE語句時,檢查約束將驗證數據; • 檢查約束中不能包含子查詢。 用Transact-SQL語句建立檢查約束。其語法形式以下: • CONSTRAINT constraint_name CHECK (logical_expression) • CHECK (logical_expression) create table sc( sno char(5) not null, cno char(5) not null, score numeric(5,1) constraint score_chk check(score>=0 and score <=100), constraint sc_prim primary key(sno,cno),
) drop table sc insert into sc values('1','2',3) DEFAULT 約束 默認約束指定在插入操做中若是沒有提供輸入值時,則系統自動指定值。默認約束能夠包括常量、函數、不帶變元的內建函數或者空值。 使用默認約束時,應該注意如下幾點: (1)每一個字段只能定義一個默認約束; (2)若是定義的默認值長於其對應字段的容許長度,那麼輸入到表中的默認值將被截斷; (3)不能加入到帶有IDENTITY屬性或者數據類型爲timestamp的字段上; (4)若是字段定義爲用戶定義的數據類型,並且有一個默認綁定到這個數據類型上,則不容許該字段有默認約束。 建立默認約束的Transact-SQL語句操做法。其語法形式以下: • CONSTRAINT constraint_name DEFAULT constraint_expression [FOR column_name] • DEFAULT constraint_expression [FOR column_name] 舉例:爲 dept字段建立默認約束。 程序清單以下: constraint con_dept default ‘計算機’ for dept NULL 約束 空值約束用來控制是否容許該字段的值爲NULL。NULL值不是0也不是空白,更不是填入字符串的「NULL」字符串,而是表示「不知道」、「 不肯定」或「沒有數據」的意思。 當某一字段的值必定要輸入纔有意義的時候,則能夠設置爲NOT NULL。如主鍵列就不容許出現空值,不然就失去了惟一標識一條記錄的做用。空值約束只能用於定義列約束。 FOREIGN KEY 約束 FOREIGN KEY約束是用於創建和增強兩個表數據之間的連接的一列或多列。外部鍵約束用於強制參照完整性。
FOREIGN KEY 約束確保同一個表或者不一樣表之間的引用完整性 必須引用一個PRIMARY KEY或者UNIQUE約束 用戶必須在應用表上具備REFERENCES權限 一個表中最多能夠有31個外部鍵約束; 在臨時表中,不能使用外部鍵約束; 主鍵和外部鍵的數據類型必須嚴格匹配 。
使用Transact-SQL語句設置外部鍵約束 ,其語法形式以下: CONSTRAINT constraint_name FOREIGN KEY (column_name[,…n]) REFERENCES ref_table [(ref_column[,…n])] ALTER TABLE [Sales].[SalesOrderHeader] WITH CHECK ADD CONSTRAINT [FK_SalesOrderHeader_Customer_CustomerID] FOREIGN KEY([CustomerID]) REFERENCES [Sales].[Customer] ([CustomerID]) 禁用 CHECK 和 FOREIGN KEY 約束: 當運行大型批處理做業時提升性能 當向表中添加新的約束的時候避免檢查已經存在的數據
=============================
必須會的SQL語句:數據庫的完整性約束 實體完整性
1.建表時定義主鍵 Create table 表名 ( Sno int identity(1,1), Sname nvarchar(20), --設置主鍵 Primary key (Sno) )
2.添加主鍵 alter table 表名 add constraint PK_表名_Sno primary key(id)
參照完整性
1.建表時定義外鍵 create table 表名 ( sno int identity(1,1) primary key, cno int not null, foreign key(cno) References 表名2(Cno) on Delete cascade --級聯刪除 on update cascade --級聯更新 -- on delete on action 刪除管制 )
2.添加外鍵 alter table 表名 add constraint FK_表名_表名2 Foreign key(cid) references 表名2(cid)
用戶定義完整性
1.非空約束 alter table 表名 alter column name varchar(20) not null
2.惟一約束 alter table 表名 add constraint UQ_表名_列名 unique(列)
3.檢查約束 alter table 表名 add constraint CK_表名_列名 check(age>5)
4.默認約束 alter table 表名 add constraint DF_表名_列名 default('男') for gender
刪除約束 --刪除約束 alter table 表名 drop constraint DF_表名_列
ref:http://yinxiangbing.iteye.com/blog/673768 另可參考:http://blog.csdn.net/xiang462042190/article/details/40658427 http://www.cnblogs.com/sixbeauty/p/4016284.html