首页 > 数据库技术 > 详细

mysql触发器使用

时间:2021-03-03 19:01:18      阅读:13      评论:0      收藏:0      [点我收藏+]

1.创建触发器

CREATE TRIGGER trigger_name

trigger_time

trigger_event ON tb_name

FOR EACH ROW

trigger_stmt

 

解释:

trigger_name:标识触发器名称,用户自行指定;

trigger_time: 标识触发时机,值为BEFORE或者AFTER;

trigger_event: 标识触发事件,值为INSERT,UPDATE,DELETE;

tb_name: 标识建立触发器的表名,即在哪张表上创建的触发器;

trigger_stmt: 触发器程序体,可以是一句sql,或者用BEGIN和END包含多条语句。

由此可见,可以建立6种触发器,即:BEFORE INSERT、BEFORE UPDATE、BEFORE DELETE、AFTER INSERT、AFTER UPDATE、AFTER DELETE。

另外有一个限制是不能同时在一个表上建立2个相同类型的触发器,因此在一个表上最多建立6个触发器。

 

trigger_event 详解

MySQL 除了对 INSERT、UPDATE、DELETE 基本操作进行定义外,还定义了 LOAD DATA 和 REPLACE 语句,这两种语句也能引起上述6中类型的触发器的触发。

LOAD DATA 语句用于将一个文件装入到一个数据表中,相当与一系列的 INSERT 操作。

REPLACE 语句一般来说和 INSERT 语句很像,只是在表中有 primary key 或 unique 索引时,如果插入的数据和原来 primary key 或 unique 索引一致时,会先删除原来的数据,然后增加一条新数据,也就是说,一条 REPLACE 语句有时候等价于一条。

INSERT 语句,有时候等价于一条 DELETE 语句加上一条 INSERT 语句。

INSERT 型触发器:插入某一行时激活触发器,可能通过 INSERT、LOAD DATA、REPLACE 语句触发;

UPDATE 型触发器:更改某一行时激活触发器,可能通过 UPDATE 语句触发;

DELETE 型触发器:删除某一行时激活触发器,可能通过 DELETE、REPLACE 语句触发。

2.查询所有触发器

show TRIGGERS;

3.删除触发器:

DROP TRIGGER double_salary;

4.注意事项

内部变量值,不能和select查询的值相同,否则会有问题。

5.游标操作(循环操作),下面是一个简单的例子

DROP TRIGGER IF EXISTS update_data; 

DELIMITER $

CREATE TRIGGER update_data

AFTER

UPDATE ON table_name(你的表名)

FOR EACH ROW

BEGIN

 DECLARE done INT DEFAULT 0;

  DECLARE ids INT;

  DECLARE sem_num_id,text_nums INT DEFAULT 0;

  DECLARE cur1 CURSOR FOR SELECT id FROM table_names; # 创建一个游标并且将查询的数据赋值给他

  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; # 用于跳出for循环

  OPEN cur1;   # 打开游标

  REPEAT # 循环数据

    FETCH cur1 INTO ids; #定义循环的值

    IF NOT done THEN

                  #      这里是做一些循环之后的操作

                  insert into .....

    END IF;

  UNTIL done END REPEAT;

  CLOSE cur1;  #      关闭游标

END $

DELIMITER;

 

6.bit操作

如果你存储的值为bit类型,需要位移才能找出哪个为真

Id_maps &(1 << ids) > 0;

Id_maps:bitmap字段,ids:位移的数字,如1,2,3,4

如果Id_maps &(1 << ids) <=0;表示这个ids在map中为false。

7.错误定位

当触发器报错为:“There is no NEW row in on DELETE trigger”

因为在删除的时候不会出现NEW.id,如果使用了就会报错,全部改为OLD.id就没有问题了。

 

showtooltip

mysql触发器使用

原文:https://www.cnblogs.com/coding8832/p/14475190.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!