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)

大家都在看

  • rocksdb列族笔记

    1、简介 列族(Column Families)是rocksdb3.0提出的一个机制,用于对同一个数据库的记录(键值对)进行逻辑划分。默认情况下所有的记录都会存储在一个默认列族里(…

    Linux 2023年6月7日
    0100
  • 机器学习入门–图学习基础01

    图表示学习入门知识 数学基础看文章理解图的拉普拉斯变换,解答了上一周文章公式中的L拉普拉斯矩阵是怎么来的 本文仅限我个人记录学习历程所用,目前是大一在读,刚刚接触AI领域。如有不足…

    Linux 2023年6月6日
    083
  • Redis 内存淘汰策略

    实际上redis定义了【八种内存淘汰策略】来处理redis内存满的情况 noeviction:直接返回错误,不淘汰任何已经存在的redis键 allkeys-lru:所有的键使用l…

    Linux 2023年5月28日
    095
  • 进程

    理论知识 操作系统背景知识 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重…

    Linux 2023年6月14日
    080
  • Debian中CodeIgniter+nginx+MariaDB+phpMyAdmin配置

    本文不讲述软件安装过程,记述本人在Debia 中配置CodeIgniter 时遇到的问题及解决方法,希望能够为有需要的人提供帮助。 一、Debian版本及所需的软件 Debian …

    Linux 2023年6月13日
    094
  • CA证书介绍与格式转换

    PKCS 公钥加密标准(Public Key Cryptography Standards, PKCS),此一标准的设计与发布皆由RSA资讯安全公司(英语:RSA Security…

    Linux 2023年6月6日
    077
  • 输入输出函数

    IDLE name=input(‘输入’) print(name) print函数 print(1,2) print(1,2,sep=",") input函数 …

    Linux 2023年6月8日
    078
  • Jenkins 内置变量

    BRANCH_NAME 对于多分支项目,这将设置为正在构建的分支的名称,例如,如果您希望master从功能分支而不是从功能分支部署到生产;如果对应于某种更改请求,则名称通常是任意的…

    Linux 2023年5月27日
    091
  • 5.7 Linux Vim可视化模式

    相信大家都使用过带图形界面的操作系统中的文字编辑器,用户可以使用鼠标来选择要操作的文本,非常方便。在 Vim 编辑器中也有类似的功能,但不是通过鼠标,而是通过键盘来选择要操作的文本…

    Linux 2023年6月7日
    0107
  • cpp-base

    1.cin&cout 2.两种注释方式 //注释方法1,’//’。用于单行注释 /* 注释方法2, 用于多行注释 */ 特别&a…

    Linux 2023年6月7日
    098
  • 魔域来了H5游戏详细图文架设教程

    前言 想体验热血传奇的战场吗?想体验满级VIP的尊贵吗?想体验榜一大佬的无敌寂寞吗?各种极品炫酷时装、坐骑、翅膀、宠物通通给你,就在魔域来了H5! 本文讲解魔域来了架设教程,想研究…

    Linux 2023年6月7日
    0109
  • 关于Java访问SQL server的错误:The server selected protocol version TLS10 is not accepted by client preferences [TLS12]及安全套接字层(SSL)加密与 SQL Server 建立安全连接

    此笔记记载了本人在使用centos7.6环境下使用java连接sqlserver2008时 The server selected protocol version TLS10 i…

    Linux 2023年6月14日
    085
  • apk自签证书

    需要用到keytool.exe (位于D:\Program Files\Java\jdk1.8.0_291\jre\bin目录下),使用产生的key对apk签名用到的是jarsig…

    Linux 2023年6月8日
    092
  • sql server的简单分页

    — 显示前条数据 select top(4) * from students; –pageSize: 每页显示的条数 –pageNow: 当前页…

    Linux 2023年6月7日
    0105
  • Jstack排查线上CPU100%

    Jstack排查线上CPU100% 介绍 jstack是JVM自带的Java堆栈跟踪工具,用于生成java虚拟机当前时刻的线程快照,来帮助定位线程出现长时间停顿的原因,例如死锁、死…

    Linux 2023年6月6日
    095
  • docker 容器大小查看及清理docker磁盘空间

    这篇文章最初是由博主创作的。请注明转载的来源: [En] This article is originally created by the blogger. Please ind…

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