SQLserver程式碼建立約束
阿新 • • 發佈:2018-11-07
約束-保證資料完整性
資料庫約束是為了保證資料的完整性(正確性)而實現的一套機制。當建立了主外來鍵關係後,如果在外來鍵表中有任何記錄引用了主鍵表中的某條記錄,則在主鍵表中不能刪除該記錄。同時主鍵表也不能刪除。
注意:建立約束時,如果表中已經存在“非法資料”(與約束不一致的資料),那麼此時是無法成功建立約束的,需要先將表中的資料做更改,然後才能建立約束。
非空約束 (選擇複選框)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
)