MySQL触发器了解一下「终于解决」

MySQL触发器了解一下「终于解决」简介 触发器是与表有关的数据库对象,当表发生INSERT/UPDATE/DELETE操作时,对应操作的触发器会被触发,将在这些操作之前或之后执行触发器中定义的SQL语句集合。 触发器的使用 创建触发器

MySQL触发器了解一下

简介

触发器是与表有关的数据库对象,当表发生INSERT/UPDATE/DELETE操作时,对应操作的触发器会被触发,将在这些操作之前或之后执行触发器中定义的SQL语句集合。

触发器的使用

创建触发器

语法:

CREATE
    [DEFINER = user]
    TRIGGER trigger_name
    trigger_time trigger_event
    ON tbl_name FOR EACH ROW
    [trigger_order]
    trigger_body

user:指定在触发器激活时检查访问权限时要使用的MySQL帐户。

trigger_name:触发器名称。

trigger_time:触发动作时间。可以是BEFORE或AFTER,表示触发器在要修改的每一行之前或之后激活。

trigger_event:触发器的类型,可以是INSERT、UPDATE、DELETE。

tbl_name:和触发器关联的表名,必须为一个永久表,不能是视图或者临时表。

trigger_order:指定触发器顺序,取值为FOLLOWS/PRECEDES+触发器名称。(从MySQL 5.7.2开始,可以为表创建具有相同trigger_time和trigger_event的多个触发器,默认顺序是按创建顺序进行激活)

trigger_body:触发器激活时要执行的语句。如果要执行多个语句,需要使用BEGIN … END复合语句包裹。

示例:

CREATE TRIGGER student_add2 AFTER INSERT ON tb_student 
FOR EACH ROW 
INSERT INTO tb_new_student (student_id, student_name) VALUES (NEW.id, NEW. NAME);

当在MySQL命令行创建执行多个语句的触发器时,同存储过程一样,也需要修改语句分隔符,如下:

mysql> delimiter //
mysql> CREATE TRIGGER upd_check BEFORE UPDATE ON account
       FOR EACH ROW
       BEGIN
           IF NEW.amount < 0 THEN
               SET NEW.amount = 0;
           ELSEIF NEW.amount > 100 THEN
               SET NEW.amount = 100;
           END IF;
       END;//
mysql> delimiter ;
触发器类型

触发器分为三种类型:INSERT、DELETE、UPDATE。

在触发器主体中,使用OLD和NEW关键字能够访问受触发器影响的行中的列,根据触发器类型的不同,在关键字使用上也有些区别。(OLD和NEW是对MySQL触发器的扩展,它们不区分大小写)

INSERT触发器:当在表中插入新行时,触发器就会激活。插入操作只有新行,所以只有NEW关键字可用,可以通过NEW访问插入的新行数据。

DELETE触发器:当在表中删除一行时,触发器就会激活。删除操作只有旧行,所以只有OLD关键字可用,可以通过OLD访问删除的旧行数据。

UPDATE触发器:当表中一行数据被修改时,触发器就会激活。NEW关键字和OLD关键字都可用,可以通过NEW访问更新后的行数据,通过OLD访问更新前的行数据。

查看触发器定义

语法:

SHOW CREATE TRIGGER trigger_name

示例:

mysql> SHOW CREATE TRIGGER student_add;
+-------------+----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| Trigger     | sql_mode                                                       | SQL Original Statement                                                                                                                                                         | character_set_client | collation_connection | Database Collation |
+-------------+----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+
| student_add | STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | CREATE DEFINER=`root`@`localhost` TRIGGER student_add AFTER INSERT ON tb_student FOR EACH ROW INSERT INTO tb_new_student (student_id, student_name) VALUES (NEW.id, NEW. NAME) | utf8                 | utf8_general_ci      | utf8_general_ci    |
+-------------+----------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+--------------------+

Trigger:触发器名称。

sql_mode:当触发器执行时,SQL模式生效。

SQL Original Statement:触发器的创建语句。

character_set_client:创建触发器时character_set_client系统变量的会话值。

collation_connection:创建触发器时collation_connection系统变量的会话值。

Database Collation:与触发器相关联的数据库的排序。

删除触发器

语法:

DROP TRIGGER [IF EXISTS] [schema_name.]trigger_name

示例:

mysql> DROP TRIGGER student_add;
Query OK, 0 rows affected

注意:如果表被删除,该表的关联的所有触发器也将会被删除

参考:Using Triggers

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

(0)
上一篇 2023-04-12
下一篇 2023-04-12

相关推荐

  • Python中的str.split方法用于分割字符串

    Python中的str.split方法用于分割字符串在Python中,我们经常需要处理字符串,而字符串的分割操作是常见的操作之一。Python中的str类提供了split方法,可以使用指定的分隔符将字符串分割成若干部分。该函数返回一个列表,其元素为分割后的所有字符串。

    2024-02-06
    93
  • Docker容器下的Mysql,设置表名忽略大小写「终于解决」

    Docker容器下的Mysql,设置表名忽略大小写「终于解决」在阿里的ECS上使用Docker安装mysql,默认拉取的版本是最新版本的,通过挂载配置和数据的方式运行容器, docker run -p 3306:3306 –name mysql-ci -v…

    2023-04-20
    177
  • 缓冲池 – MySQL 8.0官方文档笔记(五)

    缓冲池 – MySQL 8.0官方文档笔记(五)文档版本:8.0 来源:buffer pool 上一篇:如何减少和处理死锁 本篇主要介绍InnoDB的缓冲池。 缓冲池(Buffer Pool)是InnoDB在内存中缓存表和索引数据的区域。通过缓冲池

    2023-04-18
    149
  • 【科创人独家】Kyligence韩卿:立志做出中国自己的全球顶级数据平台

    【科创人独家】Kyligence韩卿:立志做出中国自己的全球顶级数据平台2016年初,Kyligence成立。这次创业,不只是一次追求商业成功的尝试,更承载着韩卿本人怀揣多年的信念:在国际基础软件领域立足并领导行业。 从中国来,到全球去 韩卿讲述了对自己产生了巨大影响的…

    2023-03-09
    155
  • Python安装Request教程

    Python安装Request教程Python是一种面向对象、解释型计算机编程语言,在数据处理、数据挖掘、网络爬虫、机器学习等领域有着广泛的应用。Requests是Python中一种方便、简洁、人性化的HTTP库,简化了HTTP请求的过程,让使用者可以更简便地发出请求、传递数据等。本文将介绍如何安装Requests库。

    2024-07-23
    38
  • 使用jsfilter函数实现根据条件筛选数据

    使用jsfilter函数实现根据条件筛选数据在日常开发中,我们经常需要对数据进行筛选操作,以得到符合条件的数据集合。在JavaScript中,可以使用内置的filter函数快速实现此功能。本文将介绍如何使用jsfilter函数实现根据条件筛选数据。

    2024-05-27
    65
  • Linux环境 mysql用navicat远程连接常见问题2003 1130 1045

    Linux环境 mysql用navicat远程连接常见问题2003 1130 1045mysql用navicat远程连接常见问题1、常见问题2003字面意思就是不能连接到10.0.0.7上面的mysql服务,为啥就不能连接了?哪里有限制?本地就可以连接啊看下服务器端监听的mysql服…

    2023-03-31
    151
  • 基于PyCharm和Jupyter的Python开发

    基于PyCharm和Jupyter的Python开发Python是一种高级的、面向对象的解释型编程语言,在数据科学、机器学习、Web开发、游戏开发等诸多领域都有广泛的应用。Python的简单易学、高效性、可读性等特点使其成为了一种非常流行的编程语言。而PyCharm和Jupyter则是Python中常用的两个开发环境,其中PyCharm是一款专业的Python集成开发环境,Jupyter则是一种Web应用,可以创建和共享文档,其中包括实时代码、方程式、可视化图表等。

    2024-08-05
    33

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注