电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

使用SQL語句創建觸發器的實例

瀏覽:5日期:2023-09-28 21:00:59
目錄前言一、觸發器的介紹1.1 觸發器 的概念以及定義:1.2 、 觸發器 的作用二、 觸發器 的種類三、使用SQL語句創建觸發器實例1.創建after融發器2.創建instead of觸發器

前言一、觸發器的介紹1.1 觸發器 的概念以及定義:

觸發器 是一種特殊類型的存儲過程,它不同于我們前面介紹過的存儲過程。存儲過程可以通過語句直接調用,而 觸發器主要是通過事件進行觸發而被執行的.例如當對某一表進行諸如UPDATE(修改)、INSERT(插入)、DELETE(刪除)這些操作時,SQL Server 就會自動執行觸發器所定義的SQL語句,從而確保對數據之間的相互關系,實時更新.

1.2 、 觸發器 的作用

觸發器的主要作用就是其能夠實現由 主鍵 和 外鍵 所不能保證的復雜的參照完整性和數據的一致性。除此之外, 觸發器 還有其它許多不同的功能:

①、復雜的約束條件觸發器 能夠實現比CHECK 語句更為復雜的約束。

②、保證數據的安全

觸發器 因為 觸發器是在對數據庫進行相應的操作而自動被觸發的SQL語句可以通過數據庫內的操作從而不允許數據庫中未經許可的指定更新和變化。

③.級聯式

觸發器 可以根據數據庫內的操作,并自動地級聯影響整個數據庫的各項內容。例如:對A表進行操作時,導致A表上的 觸發器被觸發,A中的 觸發器中包含有對B表的數據操作(UPDATE(修改)、INSERT(插入)、DELETE(刪除)),而該操作又導致B表上 觸發器被觸發。

④.調用存儲過程

為了響應數據庫更新, 觸發器 可以調用一個或多個存儲過程.

但是,總體而言, 觸發器性能通常比較低。

二、 觸發器 的種類

SQL Server 中一般支持以下兩種類型的觸發器:

AFTER 觸發器

  AFTER 觸發器 要求只有執行某一操作(INSERT、UPDATE、DELETE)之后, 觸發器 才被觸發,且只能在表上定義。可以為針對表的同一操作定義多個 觸發器 。2. INSTEAD OF 觸發器 。

  INSTEAD OF 觸發器 表示并不執行其所定義的操作(INSERT、UPDATE、DELETE),而僅是執行 觸發器 本身。既可在表上定義INSTEAD OF 觸發器 ,也可以在視圖上定義INSTEAD OF 觸發器 ,但對同一操作只能定義一個INSTEAD OF 觸發器 。

三、使用SQL語句創建觸發器實例1.創建after融發器

(1)創建一個在插入時觸發的觸發器sc_insert,當向sc表插入數據時,須確保插入的學號已在student表中存在,并且還須確保插入的課程號在Course表中存在﹔若不存在,則給出相應的提示信息,并取消插入操作,提示信息要求指明插入信息是學號不滿足條件還是課程號不滿足條件(注:Student表與sc表的外鍵約束要先取消)。

語句實現:

create trigger sc_inserton scafter insertasif not exists (select * from student,insertedwhere student.sno=inserted.sno)beginprint '插入信息的學號不在學生表中! 'if not exists (select * from course,inserted wherecourse.cno=inserted. cno)print '插入信息的課程號不在課程表中!'rollbackend elsebeginif not exists (select * from course,inserted whereCourse.cno=inserted.cno)beginprint '插入信息的課程號不在課程表中! 'rollbackendend

執行:

insert into scvalues ( '20110112','001','78')

刪除外鍵約束;

alter table scdrop constraint FK_sc__sno__332C9D34

(2)為Course表創建一個觸發器Course_del,當刪除了Course表中的一條課程信息時,同時將表sc表中相應的學生選課記錄刪除掉。

create trigger course_delon courseafter deleteasif exists(select * from sc, deletedwhere sc.cno=deleted.cno)begindelete from scwhere sc.cno in (select cno from deleted)enddelete from Coursewhere Cno='003'

select * from sc

(3)在Course表中添加一個平均成績avg_Grade字段(記錄每門課程的平均成績),創建一個觸發器Grade_modify,當sc表中的某學生的成績發生變化時,則Course表中的平均成績也能及時相應的發生改變。

向Course表中添加一個平均成績avg_Grade字段

alter table Courseadd avg_Grade smallint

向avg_Grade中添加數據

update courseset avg_Grade= (select AVG(Grade) from scwhere sc.Cno=Course.Cno)

查看Course表:

select *from Course

創建Grade_modify觸發器

create trigger Grade_modifyon scafter updateasif update(grade)beginupdate courseset avg_grade=(select avg (grade)from sc where course.cno=sc.cnogroup by cno)endupdate scset Grade='90 'where sno='20050001' and cno='001'2.創建instead of觸發器

(1)創建一視圖Student_view,包含學號、姓名、課程號、課程名、成績等屬性,在Student_view上創建一個觸發器Grade_moidfy,當對Student_view中的學生的成績進行修改時,實際修改的是sc中的相應記錄。

創建視圖:

create view student_viewasselect s.Sno,Sname , c.Cno , Cname , Gradefrom student s , course c, scwhere s.Sno=sc.sno and c.Cno=sc.cno

創建觸發器:

create trigger Grade_moidfy on student_viewinstead of updateasif UPDATE (Grade)beginupdate scset Grade= (select Grade from inserted) whereSno= (select sno from inserted) and Cno= (select Cno from inserted)Endupdate student_viewset Grade=40where Sno='20110001'and Cno='002'

測試修改數據:

select *from student_view

(2)在sc表中插入一個getcredit字段(記錄某學生,所選課程所獲學分的情況),創建一個觸發器ins_credit,當更改(注:含插入時)sc表中的學生成績時,如果新成績大于等于60分,則該生可獲得這門課的學分,且該學分須與Course表中的值一致﹔如果新成績小于60分,則該生未能獲得學分,修改值為0。

添加新字段getcredit :

alter table scadd getcredit smallint

創建觸發器:

create trigger sc_upon scafter insert,updateasdeclare @xf int,@kch char(3),@xh char(8),@fs intselect @fs=grade,@kch=cno,@xh=sno from insertedif @fs>=60update sc set @xf=(select credit from course wheresc.Cno=course.cno) where sno=@xh and cno=@kchelseupdate sc set @xf=0 where sno=@xh and cno=@kch修改數據:update scset Grade='90'where Sno='20050001' and cno='001'

以上就是對觸發器的基本認識了,希望對大家有所幫助.

到此這篇關于使用SQL語句創建觸發器的實例的文章就介紹到這了,更多相關SQL創建觸發器內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MsSQL 數據庫
相關文章:
主站蜘蛛池模板: 无压烧结银_有压烧结银_导电银胶_导电油墨_导电胶-善仁(浙江)新材料 | 雨水收集系统厂家-雨水收集利用-模块雨水收集池-徐州博智环保科技有限公司 | 权威废金属|废塑料|废纸|废铜|废钢价格|再生资源回收行情报价中心-中废网 | T恤衫定做,企业文化衫制作订做,广告T恤POLO衫定制厂家[源头工厂]-【汉诚T恤定制网】 | 日本SMC气缸接头-速度控制阀-日本三菱伺服电机-苏州禾力自动化科技有限公司 | 接地电阻测试仪[厂家直销]_电缆故障测试仪[精准定位]_耐压测试仪-武汉南电至诚电力设备 | 风电变桨伺服驱动器-风电偏航变桨系统-深圳众城卓越科技有限公司 | 铝合金电阻-无源谐波滤波器-上海稳达电讯设备厂| b2b网站大全,b2b网站排名,找b2b网站就上地球网 | 常州企业采购平台_常州MRO采购公司_常州米孚机电设备有限公司 | 回转窑-水泥|石灰|冶金-巩义市瑞光金属制品有限责任公司 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 航空障碍灯_高中低光强航空障碍灯_民航许可认证航空警示灯厂家-东莞市天翔航天科技有限公司 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 深圳3D打印服务-3D打印加工-手板模型加工厂-悟空打印坊 | 超声波_清洗机_超声波清洗机专业生产厂家-深圳市好顺超声设备有限公司 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 粉末冶金-粉末冶金齿轮-粉末冶金零件厂家-东莞市正朗精密金属零件有限公司 | 石家庄律师_石家庄刑事辩护律师_石家庄取保候审-河北万垚律师事务所 | 脉冲布袋除尘器_除尘布袋-泊头市净化除尘设备生产厂家 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 超声波清洗机_超声波清洗机设备_超声波清洗机厂家_鼎泰恒胜 | 山东臭氧发生器,臭氧发生器厂家-山东瑞华环保设备 | 河南档案架,档案密集架,手动密集架,河南密集架批发/报价 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 自动化展_机器人展_机床展_工业互联网展_广东佛山工博会 | 电动葫芦|手拉葫芦|环链电动葫芦|微型电动葫芦-北京市凌鹰起重机械有限公司 | 深圳宣传片制作-企业宣传视频制作-产品视频拍摄-产品动画制作-短视频拍摄制作公司 | 双齿辊破碎机-大型狼牙破碎机视频-对辊破碎机价格/型号图片-金联机械设备生产厂家 | 智能家居全屋智能系统多少钱一套-小米全套价格、装修方案 | 北京软件开发_软件开发公司_北京软件公司-北京宜天信达软件开发公司 | 温州在线网 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 一级建造师培训_一建培训机构_中建云筑建造师培训网校 | 电气控制系统集成商-PLC控制柜变频控制柜-非标自动化定制-电气控制柜成套-NIDEC CT变频器-威肯自动化控制 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 学考网学历中心| 袋式过滤器,自清洗过滤器,保安过滤器,篮式过滤器,气体过滤器,全自动过滤器,反冲洗过滤器,管道过滤器,无锡驰业环保科技有限公司 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 四川成都干燥设备_回转筒干燥机_脉冲除尘器_输送设备_热风炉_成都川工星科机电设备有限公司 |