版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目八触发器任务目标任务一创建触发器任务二应用触发器任务三 查看触发器任务四 删除触发器教学目标能力目标◎能熟练查看触发器信息,按需建立和修改触发器;◎能应用触发器解决复杂的业务逻辑关联。知识目标◎了解触发器的用途和类型,熟悉触发器创建语法;◎掌握触发器中的NEW和OLD的应用。学习重点◎掌握触发器的查看、建立和测试;◎掌握NEW和OLD的应用。学习难点◎触发器的级联触发与测试。任务一创建触发器创建触发器
主要内容:触发器作用创建触发器测试触发器重点难点:触发器应用;触发器作用引入:商品销售会使商品销售量增加,而库存量必须相应地减少相同数量,通常为了实现这样的强制业务规则和数据完整性,我们把这种业务规则编写成触发器,通过触发器来实现复杂的业务规则的触发动作。触发器触发器是一种与数据表紧密结合的特殊的存储过程,用于保护表中的数据。当该数据表有插入、更改或删除事件发生时,所设置的相应触发器的触发操作也会自动执行。检查数据变动的一致性:在销售图书时,为保证图书资料表和销售销售表的图书信息变动一致,可通过建立一个销售销售表上建立UPDATE和INSERT触发器,可以使用关键字old和new来引用触发器中发生变化的记录内容。创建触发器查阅语法:官网文档:/doc/refman/8.0/en/create-trigger.html语法:CREATETRIGGERtrigger_name
{BEFORE|AFTER}
{INSERT|UPDATE|DELETE}ONtbl_nameFOREACHROW[{FOLLOWS|PRECEDES}other_trigger_name]trigger_body创建触发器关键字:NEW和OLD触发器中使用的NEW和OLD,用来表示触发器的所在表中,触发了触发器的那一行数据。使用方法:NEW.col_nameOLD.col_nameOLD是只读的,而NEW则可以在触发器中使用SET赋值,这样不会再次触发触发器,造成循环调用。INSERT型触发器中,NEW用来表示将要(BEFORE)或已经(AFTER)插入的新数据;UPDATE型触发器中,OLD用来表示将要或已经被修改的原数据,NEW用来表示将要或已经修改为的新数据;DELETE型触发器中,OLD用来表示将要或已经被删除的原数据;AFTER触发器应用例1:建立一个item表的插入触发器mysql>DROPTRIGGERIFEXISTStg_goods_ins;mysql>delimiter//mysql>CREATETRIGGERtg_goods_ins
AFTERINSERTONitem
FOREACHROW
BEGIN
UPDATEgoods
SETamount=amount-NEW.quantity
WHEREid=NEW.goods_id;END//mysql>delimiter;mysql>SELECT*FROMitem;mysql>INSERTINTOitem(order_id,goods_id,supplier_id,quantity)VALUES(2,2,1,10);#测试插入触发器mysql>SELECT*FROMitem;mysql>SELECT*FROMgoods;AFTER触发器应用例2:建立一个item表的修改触发器mysql>DROPTRIGGERIFEXISTStg_goods_mod;mysql>delimiter//mysql>CREATETRIGGERtg_goods_mod AFTERUPDATEONitemFOREACHROWBEGINUPDATEgoodsSETamount=amount+(old.quantity-NEW.quantity)WHEREgoods_id=NEW.goods_id;END//mysql>delimiter;mysql>UPDATEitemSETquantity=quantity-5#测试修改触发器WHEREitem_id=6;mysql>SELECT*FROMitem;mysql>SELECT*FROMgoods;AFTER触发器应用例3:建立一个item表的删除触发器mysql>DROPTRIGGERIFEXISTStg_goods_del;mysql>delimiter//mysql>CREATETRIGGERtg_goods_delAFTERDELETEONitemFOREACHROWBEGINUPDATEgoodsSETamount=amount+old.quantityWHEREgoods_id=old.goods_id;END//mysql>delimiter;mysql>SELECT*FROMitem;mysql>SELECT*FROMgoods;mysql>DELETEFROMitemWHEREitem_id=6;BEFORE触发器应用例4:建立一个item表的BEFORE触发器mysql>SELECT*FROMorders;mysql>DROPTRIGGERIFEXISTStg_goods_ins2;mysql>delimiter//mysql>CREATETRIGGERtg_goods_ins2BEFOREINSERTONitemFOREACHROWBEGINIFNOTEXISTS(SELECT*FROMgoodsWHEREgoods_id=NEW.goods_idANDamount>NEW.quantity)THENBEGIN SIGNALSQLSTATE'H1001'SETMESSAGE_TEXT='库存不足';END;ELSEUPDATEgoodsSETamount=amount-NEW.quantityWHEREgoods_id=NEW.goods_id;ENDIF;END//mysql>delimiter;mysql>SELECT*FROMgoods;mysql>INSERTINTOitem(order_id,goods_id,supplier_id,quantity)VALUES(2,2,1,150);#测试插入触发器mysql>SELECT*FROMitem;任务实施按下列操作步骤完成db_shopping数据库触发器的建立和测试。1.选择db_shop数据库,执行语句如下:mysql>USEdb_shop;2.修改前面建立的tg_customer,当在订购表修改一条订购单时,若订购额大于0,则自动返还订购增加金额整除100的金额数到会员的余额中,执行语句如下:mysql>delimiter//mysql>CREATETRIGGertg_customerAFTERUPDATEONordersFOREACHROWBEGINDECLARENmdecimal(11,2);DECLAREOmdecimal(11,2);SETNm=NEW.amount;SETOm=OLD.amount;IFNm-Om>0THENUPDATEcustomerSETmenber_balance=menber_balance+(Nm-Om)/100WHEREid=NEW.customer_id;ENDIF;END//mysql>delimiter;3、测试触发器,执行语句如下:mysql>UPDATEordersSETamount=(SELECTSUM(total_price)FROMitemWHEREorder_id=4)WHEREid=4;查看触发器查阅语法:官网文档:/doc/refman/8.0/en/show.html使用定义和状态:SHOWTRIGGERS语句语法:SHOWTRIGGERS[{FROM|IN}db_name][LIKE'pattern'|WHEREexpr]mysql>SHOWTRIGGERSmysql>SHOWTRIGGERSFROMdb_shopLIKE'item%';查看触发器查看定义:SHOWCREATE语句mysql>SHOWCREATETRIGGERtrigger_name;查看tringgers表中的触发器信息语法:SELECT*FROMinformation_schema.triggers[WHEREtrigger_name='tri_name'];mysql>SELECT*FROMinformation_schema.triggers任务实施按下列操作完成db_shop数据库中触发器查看,从而了解触发器作用和定义。1.选择db_shop数据库,执行语句如下:mysql>USEdb_shop;2.查看系统中所有触发器,执行语句如下:mysql>SELECT*FROMinformation_schema.triggers\G3.查看当前数据库指定触发器的定义脚本,执行语句如下:mysql>SHOWCREATETRIGGERtg_goods_del;删除触发器语法:DROPTRIGGER[IFEXISTS][schema_name.]trigger_namemysql>DROPTRIGGERtest_db.tg3;考考你对item表,分别建立相应的插入、删除、修改触发器,联动修改goods中的商品数量(注:goods中没有商品数量,请添加此字段)对上面的触发器进行测试;任务实施按下列操作完成db_shopping数据库触发器的删除修改。1.选择db_shopping数据库,执行语句如下:mysql>USEdb_shopping;2.修改前面建立的tg_customer,当在订购表修改一条订购单时,按增减金额整除100的金额数更新到会员的余额,执行语句如下:mysql>delimiter//mysql>DROPTRIGGERIFEXISTStg_customer;mysql>CREATETRIGGertg_customerAFTERUPDATEONordersFOREACHROWBEGINDECLARENmdecimal(11,2);DECLAREOmdecimal(11,2);SETNm=NEW.amount;SE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025晋城职业技术学院教师招聘考试题目及答案
- 2025江苏护理职业学院教师招聘考试题目及答案
- 2026山东省鲁信投资控股集团有限公司校园招聘30人建设笔试模拟试题及答案解析
- 2026年延安子长市人才中心就业见习建设笔试参考题库及答案解析
- 2026湖南张家界市永定区西溪坪街道办事处招聘公益性岗位人员1人建设笔试模拟试题及答案解析
- 2026湖北省崇阳县人才引进26人建设考试备考题库及答案解析
- 2025年安庆市郊区法院书记员招聘考试试题及答案解析
- 2026年度通榆县第二批面向社会公开招聘公益性岗位人员(128人)建设考试参考题库及答案解析
- 中国久远高新技术装备有限公司2026届春季招聘建设考试参考题库及答案解析
- 2026四川天府新区永兴卫生院招聘编外人员1人建设笔试备考试题及答案解析
- 钢门安装合同范例
- 医院培训课件:《动脉血气分析采集方法》
- 产品保质期及破坏性实验报告
- 切割支撑梁合同范本
- 《金属非金属地下矿山监测监控系统建设规范》
- JBT 7041.3-2023 液压泵 第3部分:轴向柱塞泵 (正式版)
- 北师版小学数学五年级下册课件 6.1《确定位置(一)》
- 2023道路运输企业和城市客运企业安全生产重大事故隐患判定标准
- 动量守恒定律在碰撞中的应用五大模型
- 历年中考真题分类汇编数学
- GB/T 12008.2-2010塑料聚醚多元醇第2部分:规格
评论
0/150
提交评论