mysql中触发器是什么

mysql中,触发器是存储在数据库目录中的一组SQL语句,每当与表相关联的事件发生时,即会执行或触发触发器,例如插入、更新或删除。触发器与数据表关系密切,主要用于保护表中的数据;特别是当有多个表具有一定的相互联系的时候,触发器能够让不同的表保持数据的一致性。在MySQL中,只有执行INSERT、UPDATE和DELETE操作时才能激活触发器,其它SQL语句则不会激活触发器。

mysql中触发器是什么

本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。

mysql中的触发器

在mysql中,触发器是存储在数据库目录中的一组SQL语句,每当与表相关联的事件发生时,即会执行或触发触发器,例如插入、更新或删除。

MySQL 的触发器和存储过程一样,都是嵌入到 MySQL 中的一段程序,是 MySQL 中管理数据的有力工具。不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,而是通过对数据表的相关操作来触发、激活从而实现执行。比如当对 student 表进行操作(INSERT,DELETE 或 UPDATE)时就会激活它执行。

触发器与数据表关系密切,主要用于保护表中的数据。特别是当有多个表具有一定的相互联系的时候,触发器能够让不同的表保持数据的一致性。

在 MySQL 中,只有执行 INSERT、UPDATE 和 DELETE 操作时才能激活触发器,其它 SQL 语句则不会激活触发器。

那么为什么要使用触发器呢?比如,在实际开发项目时,我们经常会遇到以下情况:

在学生表中添加一条关于学生的记录时,学生的总数就必须同时改变。

增加一条学生记录时,需要检查年龄是否符合范围要求。

删除一条学生信息时,需要删除其成绩表上的对应记录。

删除一条数据时,需要在数据库存档表中保留一个备份副本。

虽然上述情况实现的业务逻辑不同,但是它们都需要在数据表发生更改时,自动进行一些处理。这时就可以使用触发器处理。例如,对于第一种情况,可以创建一个触发器对象,每当添加一条学生记录时,就执行一次计算学生总数的操作,这样就可以保证每次添加一条学生记录后,学生总数和学生记录数是一致的。

MySQL 支持的触发器

在实际使用中,MySQL 所支持的触发器有三种:INSERT 触发器、UPDATE 触发器和 DELETE 触发器。

1) INSERT 触发器

在 INSERT 语句执行之前或之后响应的触发器。

使用 INSERT 触发器需要注意以下几点:

在 INSERT 触发器代码内,可引用一个名为 NEW(不区分大小写)的虚拟表来访问被插入的行。

在 BEFORE INSERT 触发器中,NEW 中的值也可以被更新,即允许更改被插入的值(只要具有对应的操作权限)。

对于 AUTO_INCREMENT 列,NEW 在 INSERT 执行之前包含的值是 0,在 INSERT 执行之后将包含新的自动生成值。

2) UPDATE 触发器

在 UPDATE 语句执行之前或之后响应的触发器。

使用 UPDATE 触发器需要注意以下几点:

在 UPDATE 触发器代码内,可引用一个名为 NEW(不区分大小写)的虚拟表来访问更新的值。

在 UPDATE 触发器代码内,可引用一个名为 OLD(不区分大小写)的虚拟表来访问 UPDATE 语句执行前的值。

在 BEFORE UPDATE 触发器中,NEW 中的值可能也被更新,即允许更改将要用于 UPDATE 语句中的值(只要具有对应的操作权限)。

OLD 中的值全部是只读的,不能被更新。

注意:当触发器设计对触发表自身的更新操作时,只能使用 BEFORE 类型的触发器,AFTER 类型的触发器将不被允许。

3) DELETE 触发器

在 DELETE 语句执行之前或之后响应的触发器。

使用 DELETE 触发器需要注意以下几点:

在 DELETE 触发器代码内,可以引用一个名为 OLD(不区分大小写)的虚拟表来访问被删除的行。

OLD 中的值全部是只读的,不能被更新。

总体来说,触发器使用的过程中,MySQL 会按照以下方式来处理错误。

对于事务性表,如果触发程序失败,以及由此导致的整个语句失败,那么该语句所执行的所有更改将回滚;对于非事务性表,则不能执行此类回滚,即使语句失败,失败之前所做的任何更改依然有效。

若 BEFORE 触发程序失败,则 MySQL 将不执行相应行上的操作。

若在 BEFORE 或 AFTER 触发程序的执行过程中出现错误,则将导致调用触发程序的整个语句失败。

仅当 BEFORE 触发程序和行操作均已被成功执行,MySQL 才会执行 AFTER 触发程序。

【相关推荐:mysql视频教程】

以上就是mysql中触发器是什么的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/174110.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
谷歌浏览器如何备份登录网址和账号密码
上一篇 2026年8月30日 19:17:50
sql怎么保存数据库
下一篇 2025年12月2日 11:00:18

相关推荐

  • mysql的长整型是什么

    mysql的长整型是“BIGINT”。BIGINT是ab字节或64位整数值,在存储极大整数值时非常有用。BIGINT与其他整数数据类型一样,可以是有符号或无符号的;有符号数据类型表示该列可以存储正整数和负整数值,而无符号数据类型表示该列只能存储正整数值。有符号BIGINT类型的范围在“-922337…

    2026年8月30日
    100
  • MySQL和Redis的区别有哪些

    区别:1、MySQL是关系型数据库;而Redis是非关系型数据库。2、MySQL用于持久化存储数据到硬盘,功能强大,但是速度缓慢;而Redis用于存储使用较为频繁的数据到缓存中,读取速度快。3、MySQL的数据存放在磁盘中;而Redis的数据存放在内存中。4、MySQL常用数据类型有数值、日期/时间…

    2026年8月30日
    100
  • Ubuntu命令行下MySQL数据导出与导入语句

    你知道Ubuntu命令行下的MySQL数据的导出与导入吗?下文是小编整理的在Ubuntu命令行下数据库导入导出的方法,一起来学习一下吧! mysqldump -h主机 -u用户名 -p 数据库名 > 导出的数据库名.sql 几个比较常用的参数有:-p或–port          …

    用户投稿 2026年8月30日
    000
  • mysql默认引擎是什么

    MySQL5.5之前,默认引擎是“MyISAM”;从MySQL5.5版本开始,默认引擎是“InnoDB”,该引擎完全支持符合ACID和事务,支持外键、提交、回滚、前滚操作,表的大小最高可达64TB。在MySQL中,可以使用“SHOW ENGINES;”命令查看系统所支持的引擎类型以及默认引擎;输出结…

    2026年8月30日
    000
  • mysql怎么查询两个字段的值

    mysql怎么查询两个字段的值mysql怎么查询两个字段的值mysql怎么查询两个字段的值mysql怎么查询两个字段的值

    在mysql中,可以通过SELECT语句来查询两个字段的值,查询语法为“SELECT 字段名1,字段名2 FROM 数据表名 [WHERE子句];”。SELECT语句可以获取多个字段下的数据,只需要在关键字SELECT后面指定要查找的字段名称,不同字段名称之间用逗号“,”分隔开即可;而“WHERE子…

    2026年8月30日 用户投稿
    000
  • mysql管理工具有哪些

    mysql管理工具有哪些mysql管理工具有哪些mysql管理工具有哪些mysql管理工具有哪些

    mysql管理工具有:1、Induction,是一款用于理解数据关系的开源管理工具;2、Pinba,是一种MySQL存储引擎工具;3、DB Ninja,是一款基于Web的MySQL数据库管理与开发应用程序;4、DBManager,是一款功能强大的数据管理应用程序;5、MyWebSQL,可管理基于We…

    2026年8月30日 用户投稿
    000
  • mysql怎么取字符串前几位

    mysql怎么取字符串前几位mysql怎么取字符串前几位mysql怎么取字符串前几位mysql怎么取字符串前几位

    3种提取方法:1、使用SUBSTRING()函数,可从字符串头部开始截取指定长度的子字符串,语法“UBSTRING(字符串,1,子串长度)”。2、使用left()函数,可从字符串开头截取指定长度的子字符串并返回,语法“LEFT(字符串,子串长度)”。3、使用substr()函数,可从字符串开头截取指…

    2026年8月30日 用户投稿
    300
  • mysql可以创建联合索引吗

    mysql可以创建联合索引吗mysql可以创建联合索引吗mysql可以创建联合索引吗mysql可以创建联合索引吗

    mysql可以创建联合索引。MySQL允许用户创建一个最多包含16列的联合索引,创建方法有两个:1、创建表时创建,语法“CREATE TABLE 表名 (列名1 类型 PRIMARY KEY,列名2 类型,列名3 类型,…INDEX 索引名 (列名2,列名3…));”;2、修…

    2026年8月30日 用户投稿
    300
  • mysql日期用什么类型

    mysql日期用什么类型mysql日期用什么类型mysql日期用什么类型mysql日期用什么类型

    有5种类型:1、YEAR,用于表示年,格式为“YYYY”;2、TIME,用于只需要时间信息的值,格式为“HH:MM:SS”;3、DATE,用于仅需要日期值时,格式为“YYYY-MM-DD”;4、DATETIME,用于需要同时包含日期和时间信息的值,格式“YYYY-MM-DD HH:MM:SS”;5、…

    2026年8月30日 用户投稿
    200
  • mysql int是什么

    在mysql中,int是标准整数类型,可以代表普通大小的整数。int数据类型占4个字节,可以是有符号和无符号的,有符号时的存储范围为“-2147483648~2147483647”,无符号时的存储范围为“0~4294967295”;设置int类型的字段可以具有AUTO_INCREMENT属性,实现序…

    2026年8月30日
    300
  • Sublime结合Python批量写入MySQL数据_适合接口爬虫日志自动化记录

    Sublime结合Python批量写入MySQL数据_适合接口爬虫日志自动化记录Sublime结合Python批量写入MySQL数据_适合接口爬虫日志自动化记录Sublime结合Python批量写入MySQL数据_适合接口爬虫日志自动化记录Sublime结合Python批量写入MySQL数据_适合接口爬虫日志自动化记录

    用sublime text搭配python脚本能高效批量写入mysql数据,实现接口爬虫日志的自动化记录。1.使用sublime text轻便快捷,配合pymysql等库快速编写脚本,并支持直接运行;2.采用executemany()方法批量插入数据,显著提升效率,避免单条insert性能差的问题;…

    2026年8月30日 用户投稿
    300
  • mysql中clob和blob的区别是什么

    mysql中clob和blob的区别:1、含义不同,clob指代的是字符大对象,而blob指代的是二进制大对象;2、作用不同,clob在数据库中通常用来存储大量的文本数据,即存储字符数据,而blob用于存储二进制数据或文件,常常为图片或音频。 本教程操作环境:windows7系统、mysql8版本、…

    2026年8月30日
    100
  • mysql怎么将字符串转为datetime类型

    mysql怎么将字符串转为datetime类型mysql怎么将字符串转为datetime类型mysql怎么将字符串转为datetime类型mysql怎么将字符串转为datetime类型

    两种转换方法:1、使用str_to_date()函数,可以格式化字符串,根据指定格式将其转为日期时间值,语法“str_to_date(字符串值, 转换格式)”。2、使用CAST()函数,可以将指定字符串值转换为datetime数据类型,语法“CAST(字符串值 AS datetime)”。 本教程操…

    2026年8月30日 用户投稿
    100
  • laravel框架支持的几种数据库系统

    Laravel框架支持MySQL、PostgreSQL、MariaDB、SQL Server、SQLite和Oracle Database等数据库系统。选择数据库系统取决于特定应用程序的规模、性能、特性、成本和支持需求。 Laravel 框架支持的数据库系统 Laravel 是一个 PHP Web …

    2026年8月30日
    100
  • 怎么查看mysql是多少位

    怎么查看mysql是多少位怎么查看mysql是多少位怎么查看mysql是多少位怎么查看mysql是多少位

    查看mysql位数的两种方法:1、在cmd命令窗口中,使用cd命令进入mysql安装目录的bin目录中,再执行“mysql -V”或“mysql –version”命令,即可在输出结果中查看到位数信息。2、在mysql控制台中,执行“show variables like ‘…

    2026年8月30日 用户投稿
    100
  • laravel支持几种数据库

    Laravel 支持多种数据库连接,包括:MySQL、PostgreSQL、SQLite、SQL Server、MariaDB、MongoDB 和 Redis。要连接到数据库,您需要在 .env 文件中设置配置并使用 DB 外观进行连接。 Laravel 支持的数据库 Laravel 是一个 PHP…

    2026年8月30日
    100
  • mysql是否支持分区

    mysql是否支持分区mysql是否支持分区mysql是否支持分区mysql是否支持分区

    mysql从5.1版本开始支持分区功能。MySQL5.1中分区表达式必须是整数,或者返回整数的表达式;而MySQL5.5中提供了非整数表达式分区的支持。MySQL数据库的分区是局部分区索引,一个分区中既存了数据,又放了索引;也就是说,每个区的聚集索引和非聚集索引都放在各自区的(不同的物理文件)。My…

    2026年8月30日 用户投稿
    200
  • mysql怎么查询字段名称

    mysql怎么查询字段名称mysql怎么查询字段名称mysql怎么查询字段名称mysql怎么查询字段名称

    查询方法:1、在cmd窗口中,执行“mysql -u root -p”命令登录MySQL数据库;2、使用USE命令切换到指定数据库下,语法“USE 数据库名;”;3、使用DESCRIBE或DESC命令来查询字段名称,语法“DESCRIBE 表名;”或“DESC 表名;”,输出结果是表格形式,展示了表…

    2026年8月30日 用户投稿
    100
  • mysql怎么删除数据库

    mysql怎么删除数据库mysql怎么删除数据库mysql怎么删除数据库mysql怎么删除数据库

    删除方法:1、使用“win+r”键打开“运行”窗口,输入“cmd”,回车进入cmd命令窗口;2、在cmd窗口中,执行“mysql -u root -p”命令登录MySQL服务器;3、执行“DROP DATABASE IF EXISTS 数据库名;”命令来删除指定数据库中的所有表并永久删除该数据库,“…

    2026年8月30日 用户投稿
    200
  • mysql怎么将值转换为二进制

    mysql怎么将值转换为二进制mysql怎么将值转换为二进制mysql怎么将值转换为二进制mysql怎么将值转换为二进制

    3种转换方法:1、使用BIN()函数,可以返回指定数字的二进制值的字符串表示形式,语法“BIN(number)”,参数“number”是一个长整型(BIGINT)数。2、使用CONV()函数,可将一个进制转为另一个进制,语法“CONV(number,10,2)”,能返回指定数字的二进制值。3、使用B…

    2026年8月30日 用户投稿
    500

发表回复

登录后才能评论
关注微信