1.完整性約束命名子句
create table student
( sno numeric(6)
constraint c1 check (sno between 9000 and 99999),
sname char(20)
constraint c2 not null,
sage numeric(6)
constraint c3 check (sage<30),
s*** char(2)
constraint c4 check (s*** in ('男','女')),
constraint studentkey primary key(sno)
);
在student表上建立了5個約束條件,包括主碼約束(命名為studentkey)以及c1、c2、c3、c4四個列級約束。
2.修改表中的完整性限制
alter table student
drop constraint c1;
alter table student
add constraint c1 check (sno between 900000 and 999999);
alter table student
drop constraint c3;
alter table student
add constraint c3 check (sage<40);
sql中,可以使用create assertion語句,通過宣告性斷言來指定更具一般性的約束。可以定義涉及多個表的或聚集操作的比較複雜的完整性約束。斷言建立以後,任何對斷言中所涉及的關係的操作都會觸發關聯式資料庫管理系統對斷言的檢查,任何使斷言不為真值的操作都會被拒絕執行。
1.定義斷言
create assertion asse_sc_db_num
check(60>=(select count(*)
/*此斷言的謂詞涉及聚集操作count的sql語句*/
from course,sc
where sc.cno=course.cno and course.cname='資料庫')
);
create assertion asse_sc_cnum2
check(60>=all(select count(*)
from sc
group by cno,term)
);
2.刪除斷言
如果斷言很複雜,在系統在檢測或維護斷言的開銷過高,這是在使用斷言時應該注意的
為什麼要有觸發器這個東西?
因為前面我們的完整性約束和斷言只能檢查操作語義上的正確與否,正確的話,操作正常執行;不正確的話,操作就被拒絕執行了,什麼也不做。
沒有解決的問題,當操作不符合完整性約束時,能不能不拒絕,而是採取另外一些操作來彌補,這就需要觸發器(trigger)。
1.定義觸發器
觸發器(trigger)是使用者定義在關係表上的一類由事件驅動的特殊過程。
(1)觸發器儲存在資料庫伺服器中
(2)任何使用者對錶的增、刪、改操作均由伺服器自動啟用相應的觸發器
(3)觸發器可以實施更為複雜的檢查和操作,具有更精細和更強大的資料控制能力
create trigger sc_t
alter update of grade on sc
referencing
old row as oldtuple
new row as newtuple
for each row
when(newtuple.grade>=1.1*oldtuple.grade)
insert into sc_u(sno,cno,oldgrade,newgrade)
values(oldtuple.sno,oldtuple.cno,oldtuple.grade,newtuple.grade);
create trigger student_ count
alter insert on student
/* 觸發器啟用的時間是在執行insert後*/
referencing new table as delta
for each statement
/*語句級觸發器, 即執行完insert語句後下面的觸發動作體才執行一次*/
insert into studentinsertlog(numbers)
select count(*) from delta
以上都是after觸發器的例子,下面給出before觸發器的例子。
create trigger insert_or_update_sal
before insert or update on teacher
for each row
begin
if(new.job='教授') and(new.sal<4000)
then new.sal:=4000;
end if;
end;
2.啟用觸發器
觸發器的執行,是由觸發事件啟用的,並由資料庫伺服器自動執行
乙個資料表上可能定義了多個觸發器,遵循如下的執行順序:
(1) 執行該錶上的before觸發器;
(2) 啟用觸發器的sql語句;
(3) 執行該錶上的after觸發器。
3.刪除觸發器
刪除觸發器的sql語法:
drop trigger 《觸發器名》 on 《表名》;
觸發器必須是乙個已經建立的觸發器,並且只能由具有相應許可權的使用者刪除。
資料庫系統概論 緒論 資料庫系統概論(一)
1.1 資料庫系統概論 1.1.1 資料庫系統概論 1.資料 描述事物的符號記錄稱為是資料 資料的解釋叫做語義,他與資料時密不可分的 記錄是計算機中表示和儲存資料的一種格式或者乙個方法 2.資料庫 把資料以一定的格式存放在計算機儲存裝置上的倉庫就是資料庫 共享性 有組織 永久儲存是資料庫的三大特徵 ...
資料庫系統概論
資料庫系統概論 1 現實世界的資料化過程 現實世界是由實際存在的事物組成的。每種事物都有無窮的特性,事物之間有著錯綜複雜的聯絡。資訊世界是現實世界在人腦中的反映。現實世界中的事物和事物特性在資訊世界中分別反映為實體和實體的屬性。資訊世界是由實體組成的,每種實體都有自己有限的屬性。本質上說,實體是由有...
《資料庫系統概論》
一 概述 1.關係模型的組成 資料結構 二維表 關係 資料庫中全部資料以及資料間的聯絡都以關係來表示。資料操作 增 刪 改 查 資料的約束條件 實體完整性,參照完整性,使用者自定義的完整性。2.關係的資料結構 域 是一組既有相同資料類的值的集合,又稱值域。域中所包含值的個數稱為域的基數。笛卡爾積 所...