• ADADADADAD

    十一、MySQL触发器[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:57:27

    作者:文/会员上传

    简介:

    MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UODATE和DELETE语句。如果定义了触发程序,当数据库执行这些语

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    MySQL的触发器和存储过程一样,都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作,这些时间包括INSERT、UODATE和DELETE语句。如果定义了触发程序,当数据库执行这些语句的时候就会触发执行相应的操作,触发程序是与表有关的命名数据库对象,当表上出现特定事件时,当激活该对象。

    11.1、创建触发器

    触发器是一个特殊的存储过程,不同的是,执行存储过程要使用CALL语句来调用,而触发器的执行不需要使用CALL语句来调用,也不需要手工启动,只要当预定义的时间发生的时候,就会被MySQL自动调用。

    创建一个触发器的语法为:

    CREATETRIGGERtrigger_nametrigger_timetrigger_eventONtbl_nameFOREACHROWtrigger_body

    trigger_name:触发器名称,用户自行指定

    trigger_time:触发时机,可以指定为before或after

    trigger_event:标识触发事件

    tbl_name:标识触发器的表名

    trigger_body:触发器执行语句

    创建一个单执行语句的触发器:

    mysql>CREATETABLEaccount(acc_numINT,amountDECIMAL(10,2));QueryOK,0rowsaffected(0.06sec)mysql>CREATETRIGGERins_sumBEFOREINSERTONaccount->FOREACHROWSET@sum=@sum+NEW.amount;QueryOK,0rowsaffected(0.02sec)mysql>SET@sum=0;QueryOK,0rowsaffected(0.00sec)mysql>INSERTINTOaccountVALUES(1,1.00),(2,2.00);QueryOK,2rowsaffected(0.02sec)Records:2Duplicates:0Warnings:0mysql>SELECT@sum;+------+|@sum|+------+|3.00|+------+1rowinset(0.00sec)

    创建多个执行语句的触发器的语法:

    CREATETRIGGERtrigger_nametrigger_timetrigger_eventONtbl_nameFOREACHROWBEGINtrigger_stmtEND

    11.2、查看触发器

    查看触发器是指查看数据库中已存在的触发器的定义、状态和触发信息等可以通过SHOW TRUGGERS和在triggers表中查看触发器信息。

    mysql>CREATETABLEmyevent->(->idint(11)DEFAULTNULL,->evt_namechar(20)DEFAULTNULL->);QueryOK,0rowsaffected(0.03sec)mysql>CREATETRIGGERtrig_updateAFTERUPDATEONaccount->FOREACHROWINSERTINTOmyeventVALUES(1,'AFTERUPDATE');QueryOK,0rowsaffected(0.05sec)mysql>SHOWTRIGGERS\G***************************1.row***************************Trigger:ins_sumEvent:INSERTTable:accountStatement:SET@sum=@sum+NEW.amountTiming:BEFORECreated:NULLsql_mode:Definer:root@localhostcharacter_set_client:utf8collation_connection:utf8_general_ciDatabaseCollation:utf8_general_ci***************************2.row***************************Trigger:trig_updateEvent:UPDATETable:accountStatement:INSERTINTOmyeventVALUES(1,'AFTERUPDATE')Timing:AFTERCreated:NULLsql_mode:Definer:root@localhostcharacter_set_client:utf8collation_connection:utf8_general_ciDatabaseCollation:utf8_general_ci2rowsinset(0.00sec)

    在MySQL中所有触发器的定义都存在INFORMATION_SCHEMA数据库的TRIGGERS表中,可以通过SELECT 来查看,其语法格式为:

    SELECT*FROMINFORMATION_SCHEMA.TRIGGERSWHEREcondition;
    mysql>SELECT*FROMINFORMATION_SCHEMA.TRIGGERSWHERETRIGGER_NAME='trig_update'\G***************************1.row***************************TRIGGER_CATALOG:defTRIGGER_SCHEMA:testTRIGGER_NAME:trig_updateEVENT_MANIPULATION:UPDATEEVENT_OBJECT_CATALOG:defEVENT_OBJECT_SCHEMA:testEVENT_OBJECT_TABLE:accountACTION_ORDER:0ACTION_CONDITION:NULLACTION_STATEMENT:INSERTINTOmyeventVALUES(1,'AFTERUPDATE')ACTION_ORIENTATION:ROWACTION_TIMING:AFTERACTION_REFERENCE_OLD_TABLE:NULLACTION_REFERENCE_NEW_TABLE:NULLACTION_REFERENCE_OLD_ROW:OLDACTION_REFERENCE_NEW_ROW:NEWCREATED:NULLSQL_MODE:DEFINER:root@localhostCHARACTER_SET_CLIENT:utf8COLLATION_CONNECTION:utf8_general_ciDATABASE_COLLATION:utf8_general_ci1rowinset(0.00sec)

    11.3、触发器的使用

    触发程序是与表有关的命名数据库对象,当表上出现特定时间时,将激活该对象。

    创建一个在account表插入数据之后,更新myevent数据表的触发器。

    mysql>CREATETRIGGERtrig_insterAFTERINSERTONaccount->FOREACHROWINSERTINTOmyeventVALUES(2,'AFTERINSERT');QueryOK,0rowsaffected(0.02sec)mysql>INSERTINTOaccountVALUES(1,1.00),(2,2.00);QueryOK,2rowsaffected(0.01sec)Records:2Duplicates:0Warnings:0mysql>SELECT*FROMmyevent;+------+--------------+|id|evt_name|+------+--------------+|2|AFTERINSERT||2|AFTERINSERT|+------+--------------+2rowsinset(0.00sec)

    11.4、删除触发器

    使用DROP TRIGGER语句可以删除MySQL中已经存在的触发器,其语法格式为:

    DROPTRIGGER[schema_name.]trigger_name

    删除一个触发器

    mysql>DROPTRIGGERtest.ins_sum;QueryOK,0rowsaffected(0.02sec)

    十一、MySQL触发器.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载