4.完整性约束命名子句
1.创建
constraint 约束名 约束条件
Sage numeric(3)
constraint C1 check(Sage < 30)
constraint Student_Key primary key(Sno)
2.修改
alter table Student
drop constraint 名字
alter table Student
add constraint 名字 约束条件
5.域的完整性限制
1.创建
create domain 域名 域的数据类型
条件
create domain SEX_DOMAIN char(2) //建立一个性别域
check (value in ('男','女'))
后序建立性别时可以直接 : Ssex SEX_DOMAIN
6.断言
1.创建
create assertion 断言名 check()子句
数据库课程最多60名同学选修
create assertion ASS_SC
check(60>=select count(*)
from Course,SC
where SC.Cno=Course.Cno and Course='数据库')
2.删除
drop assertion 断言名
7.触发器
只有创建表的用户才能创建触发器
创建只有一个执行语句的触发器:
create trigger 触发器名
before/after 触发事件 //before/after是触发的时机,before是触发事件执行之前激活触发器,after是事件之后激活
触发事件:insert(插入),delete(删除),update(修改),insert or delete(二者结合),
update of<列名> (修改某列的值)
on 表名
【referencing new/old row as 变量】 //行级触发器时,用户可以在执行语句中使用new和old
new:是update/insert事件之后的新值
old:是update/dlelte事件之前的旧值
例子:
referencing
new row as newname(变量名)
old row as oldname(变量名)
for each(row/statement) //触发器类型,row行级触发器
statement语句级触发器
[when 触发条件]执行语句 //当触发条件为真时,执行触发语句。可省略
statement语句级触发器:是删除/修改这个事件本身激活了触发器,跟删几个/修改几个数据没有关系row行级触发器:当修改或删除多条记录时会触发多次,
而且如果数据没有被修改/删除,即使执行了修改/删除操作都不会激活触发器
创建有多条执行语句的触发器:
create trigger 触发器名
before/after 触发事件
on 表名
for each row
begin
执行语句
if(new.job='教授')and(new.sal<4000)
then new.sal:=4000;
end if;
end
如果一个表上有多个触发器激活,其执行顺序:1. 执行该表上的before触发器
2.激活触发器的SQL语句
3.执行该表上的after触发器
如果等级一样,谁先创建谁先执行
删除触发器
drop trigger 触发器名 on 表名