文档详情

MySQL数据库应用与开发技术.ppt

发布:2025-02-28约5.17万字共357页下载文档
文本预览下载声明

*触发器原理使用临时表使用临时表备份之前的数据逐行检查对每一行数据逐一进行检查以上两点大大增加了系统开销一般不能随意使用触发器*创建触发器创建语法CREATETRIGGER+触发器名称+触发时间点+触发事件+ON+表名+FOREACHROWBEGIN…END触发时间点:BEFORE或AFTER指明是在触发事件之前还是之后执行触发事件:INSERT、UPDATE、DELETE事件如:CREATETRIGGERupd_checkBEFOREUPDATEONaccountFOREACHROWBEGIN…END*删除触发器删除语法DROPTRIGGER+触发器名称如:DROPTRIGGERupd_check*触发器案例|建表--创建表格:tab1DROPTABLEIFEXISTStab1;CREATETABLEtab1(tab1_idvarchar(11));--创建表格:tab2DROPTABLEIFEXISTStab2;CREATETABLEtab2(tab2_idvarchar(11));*第一个触发器--功能:往tab1表添加记录后自动将此记录增加到tab2表中DELIMITER//DROPTRIGGERIFEXISTSt_afterinsert_on_tab1;CREATETRIGGERt_afterinsert_on_tab1AFTERINSERTONtab1FOREACHROWBEGINinsertintotab2(tab2_id)values(new.tab1_id);END;//DELIMITER;*触发器测试往tab1插入记录INSERTINTOtab1(tab1_id)values(0001)检索tab1、tab2数据SELECT*FROMtab1SELECT*FROMtab2*课程练习1创建触发器:t_afterdelete_on_tab1功能作用:删除tab1表记录后自动将tab2表中对应的记录删去*参考代码*课程练习1|补充选做创建触发器:t_afterupdate_on_tab1功能作用:更新tab1表记录后自动将tab2表中对应的记录更新*参考代码*new与oldold:代表操作执行前的数据行new:代表操作执行后的数据行若要执行如下语句:updateUsersetscore=80whereuser_id=1则old表示未执行update语句前user_id=1这行记录则new表示执行update语句后user_id=1这行记录old.字段名=未执行操作前的该行对应的某字段值new.字段名=执行操作后的该行对应的某字段值old.score=60new.score=80*new与oldnew赋值:只能在before中使用,不能在after中使用更新操作前使用before先赋值,再插入到数据库中如,以下语句是正确的:CREATETRIGGERupdatepriceBEFOREinsertONconsumeinfoFOREACHROWBEGINsetnew.金额=0;END;在after中:new赋值已经结束,只能读取内容如,以下语句是错误的:CEATETRIGGERupdatepriceAFTERinsertONconsumeinfoFOREACHROWBEGINsetnew.金额=0;END;*new与old总结归纳:new可在before触发器中赋值、取值可在after触发器中取值old只能用于取值,因为赋值没意义INSERT语句,只有new合法DELETE语句,只有old才合法UPDATE语句,可以同时使用new和old*课程练习2创建触发器:upd_check功能作用:修改Account表中的记录的amount字段时,作如下检查:如果修改后的值大于100,则值为100如果修改后的值小于0,则值为0如果修改后的值为旧值2倍以上,则值为旧值2倍*建表脚本CREATEDATABASEIFNOTEXISTSmydb;USEmydb;DROPTABLEIFEXISTS`account`;CREATETABLE`accoun

显示全部
相似文档