NoteOfMySQL-10-触发器与事件

触发器是由事件来触发某个操作,这些事件包括insert语句、update语句、delete语句,当数据库系统执行这些事件时,就会激活触发器执行相应的操作。
事件调度器(event schedule)用作定时执行某些特定任务来取代原先只能由操作系统的计划任务来执行的工作。

一、触发器

1. 创建触发器

create trigger trigger_name trigger_time trigger_event on table_name for each row trigger_statement;

参数 参数值 说明 trigger_statement sql语句 执行语句,可放在begin…end中 trigger_name string 触发器名称 trigger_time {before after} trigger_event `{insert update

2. 查看触发器

-- 法一:显示所有的触发器
show triggers;
-- 法二:若省略where子句也显示所有的触发器
select * from information_schema.triggers[ where trigger_name = trigger_name];

3. 删除触发器

drop trigger [database_name.]trigger_name;

其中,若省略database_name,则删除当前数据库的触发器。

4. 说明

  • 对于同一个表,不能存在两个相同的触发时间和事件的触发器。
  • 触发器不能调用将数据返回客户端的存储程序,也不能采用call语句的动态SQL。
  • 触发器针对行来操作,对大数据集的效率较低。
  • 使用OLD、NEW可用访问受影响行的列。OLD列为只读,不可修改。在before触发器中,auto_increment列的new值为0。

触发器 访问影响的行的列 INSERT触发器 new.col_name DELETE触发器 old.col_name UPDATE触发器 old.col_name, new.col_name BEFORE触发器 当具有update权限时,可用 set new.col_name=value;

5. 例子

5.1 创表

-- 创建product表
create  table  product (
    id  INT(10)  not null unique primary key,
    name varchar(20)  not null,
    function varchar(50) ,
    company varchar(20)  not null
    address varchar(50)
);

-- 创建operate表
create table operate (
    op_id  int(10) not null unique primary key auto_increment,
    op_name varchar(20) not null
    op_tiem  time not null
);

5.2 添加触发器

在product表上分别创建BEFORE INSERT、AFTER UPDATE和AFTER DELETE3个触发器,触发器的名称分别为Tproduct_bf_insert、Tproduct_af_update和Tproduct_af_del。执行语句部分都是向operate表插入操作方法和操作时间。

create trigger Tproduct_bf_insert before insert on product for each row
    insert into operate values(null, 'Insert product', now());
create trigger Tproduct_af_update after update on product for each row
    insert into operate values(null, 'Update product', now());
create trigger Tproduct_af_delete after delete on product for each row
    insert into operate values(null, 'Delete product', now());

5.3 执行操作

对product表分别执行INSERT、UPDATE和DELETE操作,分别查看operate表。

-- 插入
insert into product values(1, 'abc','治疗感冒', '北京abc制药厂','北京市昌平区');
-- 更新
update product set address='北京市海淀区' where id = 1;
-- 删除
delete from product where id = 1;

NoteOfMySQL-10-触发器与事件

二、事件

1. 使用事件之前

使用之前需要确保event_scheduler为开启状态。

-- 查看状态
show variables like 'event_scheduler';
-- 开启
set global event_scheduler = on;

2. 创建事件

create event [if not exists] event_name ON SCHEDULE schedule [ON COMPLETION [NOT] PRESERVE] [ENABLE | DISABLE] [COMMENT 'string'] DO sql_statement;

参数 参数值 说明 event_name string 事件名称同一个数据库不能有相同的事件名称 sql_statement sql语句 SQL执行语句 schedule AT timestamp [+ INTERVAL interval] EVERY interval [STARTS timestamp] [ENDS timestamp]

3. 查看事件

show events;
show create event event_name;

4. 修改事件

alter event event_name [ON SCHEDULE schedule] [RENAME TO new_name] [ON COMPLENTION [NOT] PRESERVE] [COMMENT 'string'] [ENABLE | DISABLE] [DO sql_statement]

4.1 开启事件

alter event event_name enable;

4.2 关闭事件

alter event event_name disable;

关闭事件后,若重启MySQL服务器,则事件会被删除。

5. 删除事件

drop event [if exists] event_name;

6. 例子

NoteOfMySQL-10-触发器与事件

Original: https://www.cnblogs.com/bpf-1024/p/14059936.html
Author: 步平凡
Title: NoteOfMySQL-10-触发器与事件

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/684623/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球