MySQL基础-触发器(TRIGGER)

一,创建trigger

语法:

CREATE

    TRIGGER trigger_name
    
    trigger_time trigger_event
    
    ON tbl_name FOR EACH ROW
    
    trigger_body

       该语句创建一个新的触发器。触发器是与表相关联的命名数据库对象,并在表发生特定事件时激活。触发器与名为的表相关联,该表 tbl_name必须引用一个永久表。不能将触发器与TEMPORARY表或视图(view)关联 。
       下面分别来说明一下语句中各个参数含义;

1.trigger_name

触发器名称,跟表名一样;每个触发器都有一个名字;

2. trigger_time

触发时机,表示在某种事件发生之前或者发生之后激活该trigger,有2种取值:

trigger_time取值
before
after

3. trigger_event

触发事件,表示在发生某种事件时激活该trigger,有3种取值

trigger_event取值
update
delete
insert

4.tbl_name

表示该trigger是关联哪一张表做事件的触发;

5.trigger_body

是触发器激活时要执行的语句;这个是重点,表示该触发器具体要干什么事;以begin end 做开头和结尾;

举个例子:现在有2张表;score,log;现在想要做一个触发器,在score表插入数据之后,在log表中记录user的插入时间;

create 
trigger trigger_score 
after insert on score for each row
begin
insert into log(times) value(now());
end

二, 删除trigger

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name
【如果删除表,表的触发器也将被删除。】
schema_name:其实就是databaseName(数据库名),以上面的例子为例,score表在database 为:ssm,那trigger_score 的schema_name=ssm

以上面的例子为例,要删除触发器:trigger_score ;

drop trigger ssm.trigger_score 

三,查询trigger

有2种方法:

1.查询所有的trigger

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS;

查询结果包含以下列(还有其他列,没有写完整):

TRIGGER_CATALOG 触发器所属的目录的名称。此值始终为def。
TRIGGER_SCHEMA 触发器所属的架构(数据库)的名称
TRIGGER_NAME 触发器的名称。
EVENT_MANIPULATION 触发事件(update,insert,delete)
ACTION_STATEMENT 定义了trigger具体做什么事,就是trigger_body
ACTION_TIMING 触发器是在触发事件之前还是之后激活:AFTER,BEFORE
CREATED 创建触发器的日期和时间
DEFINER 创建触发器的用户;格式为: user_name@host_name
EVENT_OBJECT_SCHEMA和 EVENT_OBJECT_TABLE 每个触发器都与一个表正好关联。这些列分别指示此表所在的目录和架构(数据库)以及表名称

看完以上信息就可以还原出创建trigger的语句了;

2.查询出当前数据库的trigger

SHOW TRIGGERS
    [{FROM | IN} db_name]
    [LIKE 'pattern']
列出当前为数据库中的表定义的触发器(默认数据库,除非FROM给出子句)。
该语句仅返回用户具有TRIGGER 权限的数据库和表的结果。
LIKE子句(如果存在)指示要匹配的表名(而不是触发器名),并使该语句显示那些表的触发器

使用举例:

show TRIGGERS in ssm like 'score%';

表示查询在 database为ssm中,表名前缀匹配:score的所有表的trigger
上一篇:九、删除用户 并提交代码到git仓库


下一篇:你不了解的flink特性-trigger