博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据库MySQL/mariadb知识点——触发器
阅读量:4690 次
发布时间:2019-06-09

本文共 2237 字,大约阅读时间需要 7 分钟。

触发器

触发器: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

你可能感兴趣的文章
Android 设置Activity大小不再全屏原理
查看>>
JAVA知识笔记
查看>>
汇编第一章
查看>>
lightoj1036_记忆化搜索
查看>>
BizTalk Server 2010 培训
查看>>
蓝桥杯 阶乘计算
查看>>
Vue中的slot标签
查看>>
hdu 2057 A + B Again
查看>>
Unity打开AppStore进行评论
查看>>
Ubuntu tty中文字符乱码
查看>>
Linux目录和权限
查看>>
java中的sleep()和wait()的区别
查看>>
HDU 1285 拓普排序 基本模板例题 确定比赛名次
查看>>
poj3278Catch That Cow(bfs)
查看>>
Spring Boot启动流程
查看>>
开源技术推荐之个人使用心得
查看>>
连号区间数|2013年蓝桥杯B组题解析第十题-fishers
查看>>
信息安全系统设计基础第九周学习总结
查看>>
C++中的类继承(4)继承种类之单继承&多继承&菱形继承
查看>>
Alpha发布PSP Daily评价总结报告
查看>>