約束-保證數據完整性
數據庫約束是為了保證數據的完整性(正確性)而實現的一套機制。當創建了主外鍵關系后,如果在外鍵表中有任何記錄引用了主鍵表中的某條記錄,則在主鍵表中不能刪除該記錄。同時主鍵表也不能刪除。
注意:創建約束時,如果表中已經存在“非法數據”(與約束不一致的數據),那么此時是無法成功創建約束的,需要先將表中的數據做更改,然后才能創建約束。
非空約束 (選擇復選框)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
)