首页 > 数据库 >MySQL触发器

MySQL触发器

时间:2023-12-03 21:23:54浏览次数:43  
标签:语句 触发 触发器 insert triggers MySQL 执行

前言

触发器(trigger)是由事件来触发某个操作,这些事件包括:insert语句、update语句、delete语句,当数据库系统执行这些事件时,就会激活执行相应的操作。

一、创建触发器

触发器是由insert、update和delete等事件来触发的某种特定的操作,满足触发器的触发条件时,数据库系统就会执行触发器中定义好的程序语句。这样做可以保证某些操作之间的一致性。

例如,当学生表中增加一个学生信息时,学生的总数就必须同时改变。这时可以创建一个触发器,每当增加一个学生记录时,就执行以此计算学生总数的操作。这样就可以保证每次增加学生的记录后,学生总数是与记录数一致的。触发器触发的执行语句可能是一个,也可能是多个。

1.1、创建只有一个语句的触发器

在MySQL中,创建只有一个执行语句的触发器的基本形式如下:

create teigger 触发器名

before | after 触发事件(在触发事件之前或之后)

on 表名(在那个表中)

for each row (行级语句触发)

执行语句

解释说明: 触发器名参数要创建的触发器的名字,before和after 参数指定了触发器执行的时间,“before”指在触发事件之前执行触发语句,“afore”表示在触发事件之后执行触发语句;“触发事件”参数指触发的条件,其中包括 insert、update、delete;“表名”参数指触发事件操作的表的名称;“for each row”表示任何一条记录上的操作满足触发事件都会触发该条件的触发器;“执行语句”参数指触发器触发后执行的程序。

-- 解释说明以下语句:执行触发器,在user执行插入操作之前,执行user_logs插入的值合并用户和密码写到user_logs的字段中
create trigger trigger_insert
after insert
on user
for each row
insert into user_logs values(null,now(),concat(new.username,new.password));

insert into user values(null,"admin","1234");

1.2、创建有多个语句的触发器

MySQL中,触发器触发的执行语句可能是多个,创建多个执行语句的触发器的基本形式:

create teigger 触发器名

before | after 触发事件(在触发事件之前或之后)

on 表名(在那个表中)

for each row (行级语句触发)

begin

执行语句列表

end

其中,begin end 直接的“执行语句列表”参数表示需要执行的多个执行语句的内容,不同的执行语句之间用分号隔开。

注: 一般情况下,MySQL默认是以;作为结束执行语句。在创建触发器过程中需要用到;。为了解决这一问题,可以用delimiter语句。如delimiter&&,可以将结束符号变成&&。当触发器创建完成后,可以用命令delimiter ;来将结束符号变为:;


二、查看触发器

查看触发器是指看数据库中已存在的触发器的定义、状态、语法等信息,查看触发器的方法包括show triggers;语句和information_schema;数据库下的triggers表等。

show triggers;
show triggers\G;-- 格式化显示触发器信息

select * from information_schema.triggers;
select * from information_schema.triggers\G;-- 格式化显示触发器信息,多用于触发器量大的查看操作

select * from information_schema.triggers where trigger_name='触发器名'\G;-- 单独查看触发器的名字定位查找

三、删除触发器

如果触发器名字已存在,或者对数据表的触发操作已存在,需要删除现有的触发器。

drop trigger 触发器名;

标签:语句,触发,触发器,insert,triggers,MySQL,执行
From: https://www.cnblogs.com/xiaobai-cs/p/17873787.html

相关文章

  • Redis缓存和MySQL数据一致性方案详解
    需求起因在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库读取缓存步骤一般没有什么问题,但是一旦涉及到数据更新:数据库和缓存更新,就容易出现缓存(Redis)和数据库(MYSQL)间......
  • mysql批量替换字段
    一、需求将数据库内指定的数据进行批量修改,可使用replace函数如IP:端口号,只改端口号的部分,将所有192.168.1.1:8001的数据8001的端口号修改为3001replace函数的用法如下:(可实现将满足条件的A的数组从B替换至C)selectrepalce(A,'B','C')astestfromABCwhereAlike'%xxx%'二、......
  • 基于Docker搭建 Mysql8.0 主从架构
    创建主从数据库文件夹mkdir-p/usr/local/mysql/master1/confmkdir-p/usr/local/mysql/master1/datamkdir-p/usr/local/mysql/slave1/confmkdir-p/usr/local/mysql/slave1/data初始化主数据库配置文件cd/usr/local/mysql/master1/confvimy.cnf-----------------......
  • 第十四章:MySQL数据库系统
    MySQL数据库系统本章的主要内容就是MySQL关系数据库系统;介绍了MySQL数据库系统和它的重要性;Linux系统下MySQL的安装与使用方式;MySQL数据库的命令模式和批处理模式的SQL脚本管理方法;C与MySQL数据库的有机结合;MySQL数据库与PHP的集成,通过动态Web创建和管理MySQL数据库。MySQL是一......
  • 选择适合您网站的 SQL 托管:MS SQL Server、Oracle、MySQL
    SQL托管如果您希望您的网站能够存储和检索数据,您的Web服务器应该能够访问使用SQL语言的数据库系统。以下是一些常见的SQL托管选项:MSSQLServerMicrosoft的SQLServer是一个流行的数据库软件,适用于具有高流量的数据库驱动网站。它是一个强大、稳健且功能齐全的SQL数据库系统。O......
  • 选择适合您网站的 SQL 托管:MS SQL Server、Oracle、MySQL
    SQL托管如果您希望您的网站能够存储和检索数据,您的Web服务器应该能够访问使用SQL语言的数据库系统。以下是一些常见的SQL托管选项:MSSQLServerMicrosoft的SQLServer是一个流行的数据库软件,适用于具有高流量的数据库驱动网站。它是一个强大、稳健且功能齐全的SQL数据库系统。......
  • 整合springboot+mybatisplus+mysql+swagger,开发后端接口
    一、版本1.springboot:2.7.82.mybatisplus:3.5.3.13.mysql:8.04.swagger:3.0二、建立数据表(省略表结构)三、新建maven工程及springboot项目1.完成后的项目目录:2.maven工程的pom文件引入依赖:点击查看代码<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http......
  • MySQL数据库管理系统
    MySQL数据库管理系统一、知识点归纳本章讨论了MySQL关系数据库系统;介绍了MySQL并指出了它的重要性;展示了如何在Linux机器上安装和运行MySQL;演示了如何使用MySQL在命令模式和批处理模式下使用SQL脚本创建和管理数据库;说明了如何将MySQL与C编程相结合;演示了如何将MySQL与PHP......
  • docker 安装mysql 8.0.26
    sudodockerpullmysql:8.0.26创建数据目录和配置文件:在你的宿主机上创建一个目录来存放MySQL的配置文件和数据。你还需要为这个目录设置适当的权限1:sudomkdir-p/data/mysql8.0/conf/data/mysql8.0/data/data/mysql8.0/logssudochmod-R755/data/mysql8.0/conf/data/......
  • 使用JookDB将Oracle数据库迁移到Mysql
    JookDB是多平台的数据库开发管理工具,如Sql输入提示、导入导出、表设计、数据编辑等功能强大,而且是C++开发的界面非常丝滑流畅。可以免费支持Oracle、Mysql、SqlServer数据库管理。要通过JookDB将Oracle数据库迁移到Mysql需要先添加连接到这两个数据库的数据源。选择菜单【文件/新建......