1. 程式人生 > >SQLserver程式碼建立約束

SQLserver程式碼建立約束


約束-保證資料完整性

資料庫約束是為了保證資料的完整性(正確性)而實現的一套機制。當建立了主外來鍵關係後,如果在外來鍵表中有任何記錄引用了主鍵表中的某條記錄,則在主鍵表中不能刪除該記錄。同時主鍵表也不能刪除。

注意:建立約束時,如果表中已經存在“非法資料”(與約束不一致的資料),那麼此時是無法成功建立約束的,需要先將表中的資料做更改,然後才能建立約束。

 

非空約束 (選擇複選框)not null
主鍵約束(PK)primary key constraint唯一且不為空(選中列,右鍵,設為主鍵)
唯一約束(UQ)unique constraint唯一,允許為空,但只能出現一次(右鍵,索引/鍵,新增)
預設約束(DF)default constraint 默人值(選中列,設定列的預設繫結值)
檢查約束(CK)check constraint 範圍以及格式限制(右鍵check約束,新增)
外來鍵約束(FK)foreign key constraint表關係(在外來鍵表,右鍵,關係,增加一個主外來鍵關係)
增加外來鍵約束時,設定級聯更新、級聯刪除:

on delete cascade
on update cascade

 

--通過t-sql語句來建立約束

--新建一張表:員工資訊表

create table Employees

(

EmpId int identity(1,1),

EmpName varchar(50),

EmpGender char(2),

EmpAge int,

EmpEmail varchar(100),

EmpAddress varchar(500)

)

 

 

create table Department

(

DepId int identity(1,1) ,

DepName varchar(50)

)

 

 

-----------------------手動刪除、修改、增加 列-----------------------------------------------

--手動刪除一列(刪除EmpAddress列)

alter table Employees drop column EmpAddress

--手動增加一列(增加一列EmpAddr varchar(1000))

alter table Employees add EmpAddr nvarchar(1000)

--手動修改一下EmpEmail的資料型別(varchar(200))

alter table Employees alter column EmpEmail varchar(200)

---------------------------------手動增加、修改、刪除 約束-------------------------------------------

--為EmpId增加一個主鍵約束

alter table Employees add constraint PK_Employees_EmpId primary key(EmpId)

--非空約束,為EmpName增加一個非空約束 not null(修改列)

alter table Employees alter column EmpName varchar(50) not null

--為EmpName增加一個唯一約束

alter table Employees add constraint UQ_Employees_EmpName unique(EmpName)

--為性別增加一個預設約束,預設為'男'

alter table Employees add constraint DF_Employees_EmpGender default('男') for EmpGender

--為性別增加一個檢查約束,要求性別只能是:'男' or '女'

alter table Employees add constraint CK_Employees_EmpGender check(EmpGender='男' or EmpGender='女')

--為年齡增加一個檢查約束:年齡必須在-120歲之間,含歲與歲。

alter table Employees add constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120)

 

--建立一個部門表,然後為Employee表增加一個DepId列。

alter table Employees add EmpDepId int not null

--為Department表設定主鍵。主鍵列是:DepId

alter table Department add constraint PK_Department_DepId primary key(DepId)

--增加外來鍵約束

alter table Employees add constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId)    on delete cascade

--增加外來鍵約束 ,同時 新增級聯刪除

alter table Employees add constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId)    on delete cascade

--刪除單個約束

alter table Employees drop constraint FK_Employees_Department

--一次刪除多個約束

alter table Employees drop constraint

FK_Employees_Department,

CK_Employees_EmpAge,

CK_Employees_EmpGender,

DF_Employees_EmpGender,

UQ_Employees_EmpName

 

--一次增加多個約束

alter table Employees add

constraint FK_Employees_Department foreign key(EmpDepId) references Department(DepId),

constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120),

constraint CK_Employees_EmpGender check(EmpGender='男' or EmpGender='女')

 

---建立表的同時就為表增加約束

create table Employees

(

EmpId int identity(1,1) primary key,

EmpName varchar(50) not null unique check(len(EmpName)>2),

EmpGender char(2) default('男'),

EmpAge int check(EmpAge>0 and EmpAge<120),

EmpEmail varchar(100) unique,

EmpAddress varchar(500) not null,

EmpDepId int foreign key references Department(DepId) on delete cascade

)

 

create table Department

(

DepId int identity(1,1) primary key,

DepName varchar(50) not null unique

)