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/612019/

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

(0)

大家都在看

  • Linux 0.11源码阅读笔记-总结

    Linux 0.11主要包含文件管理和进程管理两个部分。进程管理包括内存管理、进程管理、进程间通信模块。文件管理包含磁盘文件系统,打开文件内存数据。磁盘文件系统包括空闲磁盘块管理,…

    Linux 2023年5月27日
    084
  • 2020年12月-第02阶段-前端基础-CSS Day06

    CSS Day06 定位(position) *理解 能说出为什么要用定位能说出定位的4种分类能说出四种定位的各自特点能说出我们为什么常用子绝父相布局 *应用 能写出淘宝轮播图布局…

    Linux 2023年6月8日
    0135
  • [转]EVE-NG 中使用 SecureCRT 合并tab标签

    在EVE-NG中双击设备使用SecureCRT对设备进行调试连接时,会出现每次连接不同设备时都会打开一个新的SecureCRT窗口,而不是在一个窗口中添加一个新的标签页,这就会导致…

    Linux 2023年6月8日
    0100
  • mysql group by语句流程是怎么样的

    group by流程是怎么样的 注意点: select id%10 as m, count(*) as c from t1 group by m; group by是用于对数据进行…

    Linux 2023年6月8日
    0104
  • js学习笔记——条件 循环

    今天发现之前学的爱前端的课中JS部分函数等不全,果断换了一个课——渡一的《Web前端开发JavaScript高薪课堂》接着学习,不过废话有点多 语法:1、单if,条件成立,执行语句…

    Linux 2023年6月13日
    075
  • 操作系统实现-printk

    博客网址:www.shicoder.top微信:18223081347欢迎加群聊天 :452380935 这一次我们来实现最基础,也是最常见的函数 print,大家都知道这个是可变…

    Linux 2023年6月13日
    0111
  • MSF生成木马实现远控

    思路 使用kali工具msf制作exe木马文件靶机通过点击开启后门进行监听 原理 靶机执行木马文件后,向攻击机中发送信息建立session会话,本机打开监听状态,收到信息后进行操作…

    Linux 2023年6月13日
    062
  • SQL查询语句–统计

    — 1、日统计查询填补 i->为时间差的天数 2022-05-10为终止时间 SET @i :=- 1; SELECT date_format( DATE_SUB( ’20…

    Linux 2023年6月14日
    088
  • Redis基础教程

    redis基础教程 1、 string数据结构 a) SET server:name “fido” b) SETNX server:name1″…

    Linux 2023年5月28日
    089
  • FinalShell—一体化服务器管理软件(SSH客户端)

    下面附上一些截图和官方连接: 官网:http://www.hostbuf.com/ FinalShell是一体化的的服务器,网络管理软件,不仅是ssh客户端,还是功能强大的开发,运…

    Linux 2023年5月28日
    086
  • FusionAccess桌面云安装(Lite AD方法)

    创建FusionAccess虚拟机 选择自定义 默认兼容 选择稍后安装操作系统 选择Linux SUSE Linux 名字位置自己选择 选择最少4个处理器 选择最少8G内存 选择仅…

    Linux 2023年6月8日
    0120
  • mac如何安装FinalShell

    1、Mac一键安装脚本: curl -o finalshell_install.sh www.hostbuf.com/downloads/finalshell_install.sh…

    Linux 2023年5月28日
    0102
  • Consider defining a bean of type `xxx` in your configuration问题解决

    在使用SpringBoot装配mybatis时出现了异常 *************************** APPLICATION FAILED TO START *****…

    Linux 2023年6月13日
    0118
  • vim使用心得

    /etc/vimrc 系统整体的vim设定值 ~/.vimrc 用户自己的vim设定值 (此文件的批注为单个双引号) 目前我只设定了: set nu “显示行号 Ori…

    Linux 2023年6月6日
    090
  • 苹果手机使用altstore免越狱安装第三方应用

    转自52pojie 开发人员Riley Testut推&#x5…

    Linux 2023年6月7日
    0276
  • 【Leetcode】198. 打家劫舍

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统, 如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动…

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