數(shù)據(jù)庫操作的時候必須要實現(xiàn)數(shù)據(jù)庫的完整性,在實現(xiàn)數(shù)據(jù)庫的完整性的時候,有兩種方式都可以實現(xiàn)數(shù)據(jù)庫的完整性,第一種是通過完整性的約束實現(xiàn)數(shù)據(jù)庫的完整性,第二種就是通過用戶創(chuàng)建自定義的觸發(fā)器實現(xiàn)數(shù)據(jù)庫的完整性。
一、完整性約束實現(xiàn)數(shù)據(jù)庫的完整性
(一)主鍵約束
談到主鍵約束的話,我就通過幾個例子來實現(xiàn)創(chuàng)建主鍵約束
(1)?對 student 表添加主鍵約束
alter table student add constraint PK1 primary key (sno)
?(2)?對 sc 表添加主鍵約束
alter table sc add constraint PK3 primary key (sno,cno)
(二)外鍵約束
創(chuàng)建sc表的外鍵約束
alter table sc add constraint PK4 foreign key (sno) references student(sno); alter table sc add constraint PK5 foreign key (cno) references course(cno);
?(三)check 約束
修改student表,使用Check約束,使Sex列只能接受“男”或“女”,以強制執(zhí)行域數(shù)據(jù)完整性。
alter table student add constraint c1 check (ssex in ( ' 男 ' , ' 女 ' ))
?
(四)刪除約束
刪除SC表中的C3,C4外鍵約束。
alter table sc drop constraint pk4 alter table sc drop constraint pk5
?
二、創(chuàng)建自定義觸發(fā)器實現(xiàn)數(shù)據(jù)庫完整性
(一)創(chuàng)建一個修改用戶記錄的觸發(fā)器
創(chuàng)建觸發(fā)器 trigger_t1 ,實現(xiàn)當修改學(xué)生表 (student) 中的學(xué)生姓名時,顯示提示信息“學(xué)生姓名被修改了 !!! ”。
create trigger trigger_t1 on student for update as if update (sname) begin print ' 觸發(fā)器執(zhí)行 ' end
? 驗證觸發(fā)器:UPDATE?STUDENT?SET?SNAME='55555'?WHERE??SNO='95001'
(二)創(chuàng)建一個刪除用戶記錄的觸發(fā)器
在學(xué)生成績庫中創(chuàng)建觸發(fā)器 trigger_t2 ,實現(xiàn)如下功能:當在學(xué)生表( student )中刪除一條學(xué)生信息后,自動實現(xiàn)刪除該學(xué)生在學(xué)生選課表( sc )中的選課信息。
create trigger trigger_t2 on student for delete as declare @sno_del varchar ( 10 ) select @sno_del = sno from deleted delete from sc where sno = @sno_del
? 驗證觸發(fā)器:delete?from?student?where?sno='95001'
(三)創(chuàng)建一個級聯(lián)修改用戶信息的觸發(fā)器
創(chuàng)建觸發(fā)器 trigger_t3 ,實現(xiàn)當修改學(xué)生表( student )中的某個學(xué)生的學(xué)號時,對應(yīng)學(xué)生成績表( sc )中的學(xué)號也作修改。
create trigger trigger_t3 on student for update as if update (sno) begin declare @sno_new varchar ( 10 ), @sno_old varchar ( 10 ) select @sno_old = sno from deleted select @sno_new = sno from inserted update sc set sno = @sno_new where sno = @sno_old end
? 驗證觸發(fā)器:update?student?set?sno='123456'?where?sno=?'95002?'
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
