數據的完整性
實體完整性 又稱為行完整性,即數據庫中的所有行都具有一個非空且沒有重復的主鍵值
MSSQL中通過唯一索引、PRIMARY KEY約束、UNIQUE約束、INDENTITY屬性等來強制主鍵的唯一性
域完整性 又叫列完整性,以保證列數據的輸入具有正確的數據類型、格式和有效的數據范圍
強制域有效性可以通過限制數據類型、CHECK約束和規則、FOREIGN KEY、DEFAULT、NOTNULL定義
參照完整性 又叫引用完整性,旨在保證主表和從表數據的一致性,通過FOREIGN KEY和CHECK約束實現
用戶定義完整性 用戶定義的不屬於以上完整性的特點那個規則
SQL數據庫約束、默認和規則
1)約束 CONSTRAINT
實現約束的五種方式:
(1) CHECK約束
[CONSTRAINT 約束名] CHECK (邏輯表達式)
CREATE TABLE 成績
(
學號 char(8) NOT NULL,
CONSTRAINT ck_cj CHECK (成績>=0 and 成績<=100)
)
ALTER TABLE 成績
ADD CONSTRAINT ck_cj (成績>=60 and 成績<=100)
ALTER TABLE 成績
DROP CONSTRAINT ck_cj
(2)PRIMARY KEY約束
[CONSTRAINT 約束名] PRIMARY KEY [CLUSTERED] [NONLUSTERED]
CREATE TABLE 學生
(
學號 char(8) NOT NULL CONSTRAINT pl_xs PRIMARY KEY CLUSTERED
)
ALTER TABLE 學生
ADD CONSTRAINT pk_xs PRIMARY KEY CLUSTERED(學號)
(3)FOREIGN KEY約束 references
[CONSTRAINT 約束名] FOREIGH KEY (從表外鍵) PEFERENCES 主表 (主表外鍵)
CREATE TABLE 成績
(
學號 char(8) NOT NULL FOREIGN KEY REFERENCES 學生 (學號)
)
(4)UNIQUE約束
[CONSTRAINT 約束名] UINQUE [CLUSTERED\NONCLUSTERED](列名...)
CREATE TABLE 職工
(
身份證號 char(18) NULL CONSTRAINT uni_sfz UNIQUE
)
(5)DEFAULT約束
[CONSTRAINT 約束名] DEFAULT 默認約束值 FOR 列名
CREATE TABLE 學生
(
性別 char(2) DEFAULT '男'
)
默認[DEFAULT]
默認是一種數據庫對象,可以綁定在一列或者多列上,作用與DEFAULT約束相似,在插入數據行時,為沒有指定數據的列提供實現定義的默認值
創建默認對象
CREATE DEFAULT 默認對象名 AS 默認值
USE 學生成績
CREATE DEFAULT sex_mr AS '男'
綁定默認對象
sp_bindefault [@defname=] '默認對象名' [@objname] '綁定的列名'
use 學生成績
go
exec sp_bindefault 'sex_mr','學生.性別'
刪除綁定
sp_unbindefault [@objname=] '綁定的列名'
use 學生成績
go
exec sp_unbindefault '學生.性別'
刪除默認對象
DROP DEFAULT 默認對象名
use 學生成績
go
drop default sex_mr
規則(RULE)
規則也是一種數據庫對象,可以綁定在一列或多列上,作用與CHECK約束相似,在插入數據行時,指定接收的數據值的范圍
創建規則
CREATE RULE 規則名 AS 規則條件
USE 學生成績
go
create rule cj_rl as @cj>=0 and @cj<=100
綁定規則
sp_bindrule [@rulename=] '規則對象名' [@objname] '綁定的列名'
use 學生成績
go
exec sp_bindrule 'cj_rl','成績.成績'
刪除規則
sp_unbindrule [@objname=] '綁定的列名'
use 學生成績
go
exec sp_unbindrule '成績.成績'
刪除規則對象
DROP RULE 規則對象名
use 學生成績
go
drop rule cj_rl
