数据库[约束]笔记

数据库约束是为了保证数据的完整性而实现的一套机制。

非空约束  not null

主键约束(PK)primary key constraint唯一且不为空

唯一约束(UQ)unique constraint唯一、允许为空

默认约束(DF)default constraint

检查约束(CK)check constraint

外键约束(FK)foreign key constraint

 

-------------------手动修改表结构--------------------

--手动删除一列(删除EmpName列)

alter table Employees drop column EmpName

--手动增加一列(增加一列EmpName ,EmpAge)

alter table Employees add EmpName varchar(50),EmpAge int

--手动修改一下EmpEmail的数据类型(varchar(200))

alter table Employees alter column EmpEmail varchar(200) 

--------------------手动增加约束---------------------

--为EmpId增加一个主键约束

alter table Employees add constraint PK_EmpId primary key(EmpId);

--非空约束,为EmpName增加一个非空约束

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

--为EmpName增加一个唯一约束

alter table Employees add constraint UQ_EmpName unique(EmpName);

--为性别增加一个默认约束,默认为‘男’

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

--为年龄增加一个检查约束:年龄必须在0-120岁之间

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

 --为DepId列增加外键约束(部门表中主键列DeptId)

alter table Employees add constraint Fk_DepId_DeptId foreign key(DepId) references Department(DeptId);

---------------------一条语句为表增加多个约束----------------------------

alter table Employees add

constraint PK_Employees_EmpId primary key(EmpId),-- 增加主键约束
constraint UQ_Employees_EmpName unique(EmpName),-- 增加唯一约束
constraint DF_Employees_EmpGender default(' ') for EmpGender,-- 默认约束
constraint CK_Employees_EmpAge check(EmpAge>=0 and EmpAge<=120),  --检查约束
constraint FK_Employees_Department_DepId foreign key(DepId) references Department(DepId);--外键约束
 

---------------------手动删除约束-------------------

alter table Employees drop constraint FK_DepId_DeptId

 --手动一次删除多个约束

alter table Employees drop onstraint

FK_DepId_DeptId,

CK_EmpAge;

 

-------------------------------------------

通过使用级联引用完整性约束,您可以定义当用户试图删除或更新现有外键指向的键时, SQL Server 2005 执行的操 作。
CREATE TABLE 语句和 ALTER TABLE 语句的 REFERENCES 子句支持 ON DELETE 子句和 ON UPDATE 子句。
还可以使用 外键关系 对话框定义级联操作:
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
 
-- 设置主外键关系的级联删除
alter table Employees add constraint FK_Employees_Department_DepId
foreign key(DepId) references Department(DepId)
on delete CASCADE -- 设置级联删除
--on update cascade -- 设置级联更新
 
 
--了解
如果没有指定 ON DELETE ON UPDATE ,则默认为 NO ACTION
ON DELETE NO ACTION 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并 回滚 DELETE 语句。
ON UPDATE NO ACTION 指定如果试图更新某一行中的键值,而该行的键被其他表的现有行中的外键所引用,则产 生错误并回滚 UPDATE 语句。
CASCADE SET NULL SET DEFAULT 允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可 追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那 些行。不能为具有 timestamp 列的外键或主键指定 CASCADE
ON DELETE CASCADE 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有 包含那些外键的行。
ON UPDATE CASCADE 指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组 成外键的所有值也将更新到为该键指定的新值。
注意: 如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE
ON DELETE SET NULL 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行 中的外键的所有值将被设置为 NULL 。为了执行此约束,目标表的所有外键列必须可为空值。
ON UPDATE SET NULL 指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行 中的外键的所有值将被设置为 NULL 。为了执行此约束,目标表的所有外键列必须可为空值。
ON DELETE SET DEFAULT 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引 用行中的外键的所有值将被设置为它们的默认值。为了执行此约束,目标表的所有外键列必须具有默认定义。如果某 个列可为空值,并且未设置显式的默认值,则将使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
ON UPDATE SET DEFAULT 指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引 用行中的外键的所有值将被设置为它们的默认值。为了执行此约束,目标表的所有外键列必须具有默认定义。如果某 个列可为空值,并且未设置显式的默认值,则将使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
 
 

 

 

 

 

 

转载于:https://www.cnblogs.com/chay1227/archive/2013/03/26/2982933.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值