SQL的安全机制:完整性定义约束,视图机制,对用户进行授权控制
完整性约束分类:
1).根据数据对象的状态可分为: 静态约束与动态约束
a.静态约束: 隐式约束和显式约束
隐式约束:隐含于数据模型中的完整性约束。关系模型的隐式约束有域约束和表约束
域约束即列值域的约束,只能使用CHECK来约束
表约束包括表级约束和列级约束 涉及PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK, DEFAULT, NOT NULL
显式约束:隐式约束不能完全描述现实中的规定或约束,特别是与具体应用有关的约束。其定义方式有:过程化定义、断言、触发器。断言是定义的表与表之间的约束关系。和域约束一样,断言也只能使用CHECK约束。
b.动态约束:反映数据库状态变迁的约束。
2).根据数据库的实体对象可分为实体本身的完整性和实体之间的参照完整性
表约束:
1).DEFAULT约束
DEFAULT 'abc'
DEFAULT 2010
DEFAULT getdate()
DEFAULT null
2).NOT NULL约束
create table test(id int, name nvarchar(20) not null)
3).CHECK约束
constraint ck_test check(starttime<=endtime and endtime is null)
4).UNIQUE约束
create table test(id int unique, name nvarchar(20) unique, code varchar(11) not null)
create table test2(id int , name nvarchar(20) , code varchar(11) not null constraint uq_test unique(id,name))
5).FOREIGN KEY约束
deptno char(2) not null default '01' references dept(deptno)
constraint fk_test foreign key(deptno) references dept(deptno)
禁止和使用约束:
alter table test disable/enable constraint ck_test
alter table test disable/enable primary key