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)

大家都在看

  • 域控制器所需的DNS SRV记录没有在DNS中注册的解决方法

    搭建完AD和DNS之后,发现在DNS的正向查找区域没有SRV记录,并且客户端无法加入到AD中,如下 解决方法 删除正向查找区域下的目录 然后选择”正向查找区域&#822…

    Linux 2023年6月14日
    0114
  • [Git系列] Git 基本概念

    版本控制系统 版本控制系统是一种帮助软件开发者实现团队合作和历史版本维护的软件,一个版本控制系统应具备以下列出的这几个基本功能: 允许开发者并发工作; 不允许一个开发者覆写另一个开…

    Linux 2023年6月14日
    0108
  • 技术漫谈之——Jectpack Compose

    最近Jetpack Compose发布了Beta版本,抽时间了解了一下Compose带来的改变和其中的一些原理。本文不会讲解具体API,只是比较随意的分享自己的一些疑问以及在探寻答…

    Linux 2023年6月13日
    0108
  • Wine 运行百度云盘 中文乱码解决;wine中文乱码解决;fedora 34 运行百度网盘;

    今天需要下个 imagenet 的 ILSVRC2012 数据集,找到了网友在百度网盘中分享的下载好的; 但是因为本人使用的是 fedora 34 系统,所以尝试下载 百度网盘 l…

    Linux 2023年6月14日
    0113
  • Java中QueryWrapper的基本使用

    1.单表查询 对应的sql语句为: select * from student where name = ‘?’ and class like ‘%?%’ and age betw…

    Linux 2023年6月7日
    0111
  • redis

    字符串:类似vector,有空闲的空间 capacity和len,当长度小于1M时,每次扩容加倍,大于1M,每次扩容1M,最大512M hash: 相当于c++ unordered…

    Linux 2023年5月28日
    093
  • rocketmq高可用集群部署(RocketMQ-on-DLedger Group)

    编辑broker的配置文件 第一台主机node0的配置(192.168.0.218): vim ./conf/dledger/broker-n0.conf 内容如下: broker…

    Linux 2023年6月8日
    0110
  • mit6.824 笔记 一

    分布式是复杂的系统再考虑分布式系统前应该尽可能尝试其他方法。 人们使用大量的相互协作的计算机驱动力是: 人们需要获得更高的计算性能。可以这么理解这一点,(大量的计算机意味着)大量的…

    Linux 2023年6月7日
    0110
  • 运算符重载和深浅拷贝

    对于某些运算符号(+,-,,/….),我们不满足与它原有的操作方式,而是要在对 特有对象(如负数的加减)进行使用,但是编译器会不允许这样做,因为会与操作符 原本的类型不…

    Linux 2023年6月7日
    0101
  • Centons7最小化安装报错:ping: baidu.com: Name or service not know

    在这之前,centos7最小化安装默认是不能联网的,首先必须切换到root用户,再解决网络问题 一、 切换到root用户 二、 解决网络问题 一、切换到root用户 Linux下切…

    Linux 2023年6月7日
    0163
  • Shiro结合Redis实现分布式或集群环境下的Session共享

    本篇是Shiro系列第二篇,使用Shiro基于Redis实现分布式或集群环境下的Session共享。在讲Session共享之前先说一下为什么要做Session共享。 什么是Sess…

    Linux 2023年5月28日
    0133
  • XXE漏洞学习

    0x00 XXE漏洞介绍: 背景:2018-7-4 微信支付SDK漏洞(XXE漏洞),攻击者可以获取服务器中目录结构,文件内容,eg:代码,各种 私钥。敏感数据泄露 0x01什么是…

    Linux 2023年6月6日
    0113
  • Unicode、UTF-8、UTF-16 终于懂了

    计算机起源于美国,上个世纪,他们对英语字符与二进制位之间的关系做了统一规定,并制定了一套字符编码规则,这套编码规则被称为ASCII编码 ASCII 编码一共定义了128个字符的编码…

    Linux 2023年6月13日
    0108
  • Java8新特性终极指南

    欢迎来到Java学习之Java8新特性终极指南 目录 系列文章目录 @ 目录 系列文章目录 Java语言新特性 Lambda表达式 函数式接口 方法引用 接口的默认方法 重复注解 …

    Linux 2023年6月13日
    0115
  • 代码中的软件工程复习

    编写高质量代码的基本方法 通过控制结构简化代码 通过数据结构简化代码 一定要有错误处理 注意性能优先的代价 拒绝修修补补不断重构代码 性能优先策略带来的隐藏代价 软件工程师的人力成…

    Linux 2023年6月8日
    0102
  • 搭建一个完整的K8S集群——-基于CentOS 8系统

    创建三个centos节点: 192.168.5.141 k8s-master 192.168.5.142 k8s-nnode1 192.168.5.143 k8s-nnode2 查…

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