MySQL的触发器

Cmd Markdown地址

在某个表发生更改(DELETE、INSERT、UPDATE)时自动处理某些事情。

删除触发器

-- 删除触发器
DROP TRIGGER new_user;

创建触发器

创建触发器:

1、唯一的名;
2、关联的表;
3、响应活动(DELETE、INSERT、UPDATE);
4、何时执行(处理前/后)。

注意:触发器只支持表,不支持触发器和临时表。

INSERT触发器

注意:

1、可使用NEW访问被插入的数据;
2、BEFORE INSERT 触发器允许更改被插入的值;
3、AUTO_INCREAMENT列,NEW在INSERT执行前包含0,在INSERT执行后包含心的自增长值。

AFTER INSERT 示例:

-- 创建一个INSERT触发器,插入完成后返回插入的ID。
CREATE TRIGGER new_user
AFTER INSERT ON users 
FOR EACH ROW SELECT NEW.id;

-- 执行插入语句
INSERT INTO users(str_name, str_tel)('xuejianhui', '15657119571');

BEFORE INSERT 示例:

-- 创建BEFORE INSERT触发器,插入前修改对应的值。
DROP TRIGGER IF EXISTS bf_dev_irt_mdf_db;
CREATE TRIGGER bf_dev_irt_mdf_db BEFORE INSERT ON device
FOR EACH ROW BEGIN
    IF NEW.nProductType = 30001 THEN
        SET NEW.strPassword = MD5(NEW.strPassword);
    END IF;
END;

-- 执行插入测试
INSERT INTO device (strPassword, nProductType) VALUES ('12345', 30001);

UPDATE触发器

注意:可使用OLD访问只读的被删除的行。

-- 创建一个DELETE触发器,将实时日志中被删除的数据插入到历史日志表。
CREATE TRIGGER delete_real_logs
BEFORE DELETE ON real_logs
FOR EACH ROW
BEGIN
    INSERT INTO history_logs(...) VALUES(...);
END;

UPDATE触发器

注意:

1、NEW和OLD都可用;
2、BEFORE UPDATE中,允许更改NEW中的值;
3、OLD中的值为只读。

-- 创建一个UPDATE触发器,更新用户表时转换名称的大小写。
CREATE TRIGGER update_user_name
BEFORE UPDATE ON users
FOR EACH ROW
SET NEW.str_name = UPPER(NEW.str_name);

总结

注意:

1、创建触发器可能需要特殊的安全访问权限;
2、触发器可用来检查数据的一致性;
3、可用来记录操作流水;
4、MySQL触发器不支持调用存储过程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值