mysql 触发器创建实例(数据查询与备份触发器)(mysql 触发器中止)

before insert触发器

DROP TRIGGER `before_insert_backup_password`;

CREATE DEFINER=`root`@`%` TRIGGER `before_insert_backup_password` BEFORE INSERT ON `osspub_manager_devicefirmwares_password_copy`
FOR EACH ROW 
BEGIN
set @trigger_key = null; # 当查询为空时,select...into不会对变量赋值
select key into @trigger_key from `osspub_manager_computers` where devicefirmwares_id = NEW.device_id;
if @trigger_key IS NOT NULL then
    insert into osspub_manager_bios_trig_passwords values (null, NEW.newap, concat('new', NEW.type), @trigger_key , 'insert', now());
else 
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = '未找到计算机,操作已终止';
end if;
END;

before update触发器

DROP TRIGGER `before_update_backup_password`;

CREATE DEFINER=`root`@`%` TRIGGER `before_update_backup_password` BEFORE UPDATE ON `osspub_manager_devicefirmwares_password_copy`
FOR EACH ROW 
BEGIN
set @trigger_key = (select key from `osspub_manager_computers` where devicefirmwares_id = NEW.device_id); # 根据select返回直接进行复制(包括返回null)
if @trigger_key IS NOT NULL then
    if NEW.newap <> OLD.newap then
        insert into osspub_manager_bios_trig_passwords values (null, NEW.newap, concat('new', NEW.type), @trigger_key , 'update', now());
    end if;
else 
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = '未找到计算机,操作已终止';
end if;
END;

before delete触发器

DROP TRIGGER `before_delete_backup_password`;

CREATE DEFINER=`root`@`%` TRIGGER `before_delete_backup_password` BEFORE DELETE ON `osspub_manager_devicefirmwares_password_copy`
FOR EACH ROW 
BEGIN
declare trigger_key varchar(100); # 局部变量,单次有效
select key into trigger_key from `osspub_manager_computers` where devicefirmwares_id = OLD.device_id;
if trigger_key IS NOT NULL then
    insert into osspub_manager_bios_trig_passwords values (null, OLD.newap, concat('new', OLD.type), trigger_key, 'delete', now());
else 
    SIGNAL SQLSTATE '45000'
    SET MESSAGE_TEXT = '未找到计算机,操作已终止';
end if;
END;

参考链接:
官方文档:中止BEGIN…END
mysql触发器教程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值