触发器

触发器:trigger,是指事先为某张表绑定一段代码,当表中的某些内容发生改变(增、删、改)的时候,系统会自动触发代码并执行。

触发器包含三个要素,分别为

  1. 事件类型:增删改,即insertdeleteupdate
  2. 触发时间:事件类型前和后,即beforeafter
  3. 触发对象:表中的每一条记录(行),即整张表

每张表只能拥有一种触发时间的一种事件类型的触发器,即每张表最多可以拥有 6 种触发器;即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

创建触发器

创建触发器语法如下

mysql CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_body

其中:

trigger_name:标识触发器名称,用户自行指定;
trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;
trigger_event:标识触发事件,取值为 INSERT、UPDATE 或 DELETE;
tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;
trigger_stmt:触发器程序体,可以是一句SQL语句,或者用 BEGIN 和 END 包含的多条语

查看触发器

和查看数据库(show databases;)查看表格(show tables;)一样,查看触发器的语法如下:

SHOW TRIGGERS;

删除触发器

和删除数据库、删除表格一样,删除触发器的语法如下:

DROP TRIGGER trigger_name;

示例

创建触发器,在向学生表INSERT数据时,学生数增加,删除学生信息时,学生数减少。

MariaDB [testdb]> CREATE TABLE students_info (id TINYINT(2) NOT NULL AUTO_INCREMENT,name VARCHAR(30) DEFAULT NULL,PRIMARY KEY(id));  #创建一张学生信息表
MariaDB [testdb]> CREATE TABLE students_count (stu_count TINYINT(2) DEFAULT 0);  #创建一张学生数量表
MariaDB [testdb]> INSERT INTO students_count VALUES(0);  #给个初识值0MariaDB [testdb]> CREATE TRIGGER trigger_students_count_insert-> AFTER INSERT-> ON students_info FOR EACH ROW-> UPDATE students_count SET stu_count=stu_count+1;
Query OK, 0 rows affected (0.00 sec)MariaDB [testdb]> CREATE TRIGGER trigger_students_count_delete-> AFTER DELETE-> ON students_info FOR EACH ROW-> UPDATE students_count SET stu_count=stu_count-1;
Query OK, 0 rows affected (0.01 sec)

  

MariaDB [testdb]> INSERT students_info(id,name) VALUES (1,'Tom'),(2,'Maria');
MariaDB [testdb]> SELECT * FROM students_info;
+----+-------+
| id | name  |
+----+-------+
|  1 | Tom   |
|  2 | Maria |
+----+-------+
MariaDB [testdb]> SELECT * FROM students_count;  #插入记录,触发事件,数量增加为2
+-----------+
| stu_count |
+-----------+
|         2 |
+-----------+
MariaDB [testdb]> DELETE FROM students_info WHERE id=1;
MariaDB [testdb]> SELECT * FROM students_info;
+----+-------+
| id | name  |
+----+-------+
|  2 | Maria |
+----+-------+
MariaDB [testdb]> SELECT * FROM students_count;  #删除记录,数量减1
+-----------+
| stu_count |
+-----------+
|         1 |
+-----------+

  

转载于:https://www.cnblogs.com/Gmiaomiao/p/9207464.html

数据库MySQL/mariadb知识点——触发器相关推荐

  1. 数据库MySQL/mariadb知识点——操作篇(2)库管理语句

    创建数据库 CREATE DATABASE [IF NOT EXISTS] db_name; 创建数据库 CHARACTER SET 'character set name' 设置字符集类型 COLL ...

  2. 数据库MySQL/mariadb知识点——日志记录(2)二进制日志

    二进制日志 记录已提交事务导致数据改变或潜在导致数据改变的SQL语句,通过"重放"日志文件中的事件来生成数据副本,不依赖存储引擎类型. 开启二进制日志,默认是关闭的,二进制日志和数 ...

  3. 数据库MySQL/mariadb知识点——索引

    索引 ​ 索引是特殊数据结构:定义在查找时作为查找条件的字段,索引实现在存储引擎. 索引可以降低服务需要扫描的数据量,减少了IO次数 索引可以帮助服务器避免排序和使用临时表 索引可以帮助将随机I/O转 ...

  4. 数据库MySQL/mariadb知识点——函数

    函数 函数,就是将一段代码封装到一个结构中,在需要执行该段代码的时候,直接调用该结构(函数)执行即可.此操作,实现了代码的复用.在 MySQL 中,函数有两种,分别为:系统函数和自定义函数. 1.系统 ...

  5. 数据库MySQL/mariadb知识点——操作篇(4)数据操作语句

    INSERT插入数据 单挑记录插入 INSERT INTO tb_name (col1,col2,...) VALUES (val1,val2,...); 示例: insert into tablen ...

  6. 数据库MySQL/mariadb知识点——数据类型

    数据类型 所谓的列类型,其实就是指数据类型,即对数据进行统一的分类,从系统的角度出发是为了能够使用统一的方式进行管理,更好的利用有限的空间. 在 SQL 中,将数据类型分成了三大类,分别为:数值型.字 ...

  7. mariadb不能导入与mysql可以,mysql/mariadb知识点总结(12):insert语句总结

    这篇文章总结了mysql中的insert语句,delete.update.select等DML语句将会在其他文章中单独总结. 在本博客中,"mysql"是一个系列文章,这些文章主要 ...

  8. 数据库mysql进阶—trigger触发器

    触发器 在实际开发中,我们经常会遇到这样的情况:有两个或者多个相互关联的表,如商品信息和库存信息分别存放在2个不同的数据表中,我们在添加一条新的商品记录的时候,为了保证数据的完整性,必须同时在库存表中 ...

  9. centos7数据库mysql+mariadb

    1.MySQL库备份脚本(navicat for mysql是外部测试连接工具) #!/bin/bash # 要备份的数据库名,多个数据库用空格分开 databases=(guowang yaohan ...

最新文章

  1. VTK:PolyData之ExtractSelectionCells
  2. gridView删除提示框
  3. may indicate binary incompatibility. Expected 160 from C header, got 152 from PyObject
  4. 【渝粤教育】国家开放大学2018年春季 0257-22T高级英语听力(1) 参考试题
  5. 如何从JavaScript中删除数组中的元素?
  6. detours安装和使用
  7. CentOS7 MongoDB安裝
  8. 解决mysql编码问题_解决mysql乱码问题
  9. 基恩士扫码枪SR2000系列通讯
  10. 计算机主机域名是,主机域名究竟是什么
  11. Photoshop2018安装
  12. 发布任务接单小程序开发制作
  13. 计算机管理属性被禁用,win7命令提示符提示已被系统管理员停用?
  14. 树莓派zero刷系统并通过usb访问
  15. android notify() notifyAll()的区别
  16. 聚焦“云XR如何赋能元宇宙”,3DCAT实时云渲染首届行业生态合作交流会成功举办
  17. 辰视将携3D视觉新技术新产品参加2021广东工博会暨广东自动化展
  18. PMP第6章知识点回顾,练习题
  19. 计算机系统恢复原始状态,电脑系统还原到最初状态步骤方法
  20. 计算机语言CAD是什么意思,CAD是什么意思|CAD是什么软件

热门文章

  1. 深度学习——模型的压缩和加速
  2. php文件上传后没有打开权限_记墨者靶机文件上传(二)
  3. javascript犀牛书_犀牛书作者:最该忘记的JavaScript特性
  4. 【Pytorch神经网络理论篇】 29 图卷积模型的缺陷+弥补方案
  5. 视频操作_01视频读写:视频读写+读取视频+保存视频
  6. 七、Vue cli详解学习笔记——什么是Vue cli ,Vue cli的使用(安装,拉取2.x模板,初始化项目),Vue cli2详解,Runtime-Compiler和Runtime-only区别
  7. python网络爬虫系列(四)——requests模块
  8. LeetCode MySQL 1070. 产品销售分析 III(group by 陷阱)
  9. LeetCode 293. 翻转游戏
  10. LeetCode 457. 环形数组循环(暴力+快慢指针)