MySQL触发器中通过SELECT语句给局部变量赋值

一条赋值变量引发的巨坑,自己备注一下,浪费了不少时间。这边关键字,我都用了大写,方便观看。好久之前记录的了,现优化了格式,更方便阅读

 

一,新增的实例

CREATE  TRIGGER  num_in  AFTER  INSERT  ON user_t
FOR   EACH   ROW  BEGIN

--变量的声明
DECLARE num INT(11) ;

--赋值
SET  num = (SELECT  COUNT(id)  FROM user_t) ;

     UPDATE  count_table SET count_num = num , update_time = SYSDATE() 
     WHERE table_name = "user_t" ;

END ;

 

二,删除的实例

CREATE  TRIGGER  account_delete_info  AFTER  DELETE  ON sys_account_info
FOR   EACH   ROW  BEGIN

DECLARE deleteid INT(11) ;

-- 保险起见
SET  deleteid = 0 ;

-- 直接获取不到,得先存一下  这是个小坑
SET  deleteid = OLD.id ;

-- 保险起见 ,确保在获得值的时候删除
IF deleteid != 0 THEN

   DELETE from sys_user_info  where sys_user_info.account_id = deleteid ;

END IF ;

END ;

 

三,删除触发器


DROP TRIGGER account_delete_info ;

 

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
MySQL 触发器可以在插入、更新或删除数据时自动执行一些操作。如果需要在触发器使用循环插入语句,可以使用 CURSOR 来实现。 以下是一个示例,演示如何在 MySQL 触发器使用循环插入语句: ``` DELIMITER // CREATE TRIGGER my_trigger AFTER INSERT ON my_table FOR EACH ROW BEGIN DECLARE i INT DEFAULT 1; DECLARE max_count INT; DECLARE cur CURSOR FOR SELECT id FROM my_other_table; SET max_count = (SELECT COUNT(*) FROM my_other_table); OPEN cur; WHILE i <= max_count DO FETCH cur INTO @other_id; INSERT INTO my_join_table (table_id, other_table_id) VALUES (NEW.id, @other_id); SET i = i + 1; END WHILE; CLOSE cur; END// DELIMITER ; ``` 在上面的示例,我们首先定义了一个名为 `my_trigger` 的触发器,它会在 `my_table` 表插入新记录后执行。 在触发器内部,我们声明了三个变量:`i`、`max_count` 和 `cur`。`i` 用于迭代,并初始化为 1。`max_count` 是 `my_other_table` 表的行数。`cur` 是一个 `SELECT` 语句的游标,用于遍历 `my_other_table` 表的所有记录。 接下来,我们打开游标,并使用 `WHILE` 循环遍历 `my_other_table` 表的所有记录。在每次迭代时,我们将游标指向的 `id` 值插入到 `my_join_table` 表,同时将 `table_id` 设为 `NEW.id`,表示与 `my_table` 表的新记录相关联。 最后,我们关闭游标,完成触发器的执行。 需要注意的是,循环插入语句可能会影响性能,特别是在处理大量数据时。因此,建议在使用循环插入语句时,尽量避免在触发器使用。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值