美文网首页
看了你就会写的MySQL之触发器

看了你就会写的MySQL之触发器

作者: HeloWxl | 来源:发表于2019-10-21 15:30 被阅读0次

MySQL中的触发器

1.触发器

简单的说就是一张表在发生某件事时(增删改),然后会自动的触发预先编写好的若干条SQL语句的执行。

2.特点

触发事件的操作和触发器里的SQL语句都是一个事务操作,具有原子性,要么全部执行,要么都不执行。

Demo

创建user和user_history表,以及三个触发器his_insert_user、his_update_user、his_delete_user,分别对应user表的增、删、改三件事件;

SQL语句

创建user表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `account` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

创建user_history表

DROP TABLE IF EXISTS `user_history`;
CREATE TABLE `user_history` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL,
  `operatetype` varchar(200) NOT NULL,
  `operatetime` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

触发器

Navicat下新建触发器

在你的数据库里找到user表,然后设计表。


user表.png

然后找到触发器,如下图所示:

新增

his_insert_user.png

修改

his_update_user.png

删除

his_delete_user.png

测试

INSERT INTO user(account, name, address) VALUES ('xxl', 'sss', 'aaa');
-- UPDATE user SET name = 'bol', account = 'shakalaka', address='boom' where name='xxl';
-- DELETE FROM `user` where name = 'user1';

使用语句新建触发器

insert

DROP TRIGGER IF EXISTS `tri_insert_user`;
DELIMITER ;;
CREATE TRIGGER `tri_insert_user` AFTER INSERT ON `user` FOR EACH ROW begin
    INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (new.id, 'add a user',  now());
end
;;
DELIMITER ;

update

DROP TRIGGER IF EXISTS `tri_update_user`;
DELIMITER ;;
CREATE TRIGGER `tri_update_user` AFTER UPDATE ON `user` FOR EACH ROW begin
    INSERT INTO user_history(user_id,operatetype, operatetime) VALUES (new.id, 'update a user', now());
end
;;
DELIMITER ;

delete

DROP TRIGGER IF EXISTS `tri_delete_user`;
DELIMITER ;;
CREATE TRIGGER `tri_delete_user` AFTER DELETE ON `user` FOR EACH ROW begin
    INSERT INTO user_history(user_id, operatetype, operatetime) VALUES (old.id, 'delete a user', now());
end
;;
DELIMITER ;

说明:
new:当触发插入和更新事件时可用,指向的是被操作的记录
old: 当触发删除和更新事件时可用,指向的是被操作的记录

相关文章

  • 看了你就会写的MySQL之触发器

    MySQL中的触发器 1.触发器 简单的说就是一张表在发生某件事时(增删改),然后会自动的触发预先编写好的若干条S...

  • mysql触发器

    为了梦想,努力奋斗! 追求卓越,成功就会在不经意间追上你 mysql之触发器trigger 触发器(trigger...

  • MySQL触发器介绍

    前言: 在学习 MySQL 的过程中,可能你了解过触发器的概念,不清楚各位是否有详细的去学习过触发器,最近看了几篇...

  • dbForge Studio for MySQL 触发器调试

    使用工具:dbForge Studio for MySQL 1,创建触发器 2,调试触发器 要调试MySQL触发...

  • 触发器

    MySQl中触发器 MySQl中触发器的语法如下: 例子:其中,new代表新插入的行记录

  • Oracle与Mysql中的触发器(Trigger)对比

    Oracle触发器 Demo(通过触发器结合创建序列(sequence)的方式实现字段递增) Mysql 触发器(...

  • mysql必知必会(25):触发器

    一、触发器 版本要求:MySQL5+ 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BE...

  • PHP操作MYSQL触发器讲解

    一,触发器 1.创建触发器 在MySQL中,创建触发器语法如下: 代码如下: CREATE TRIGGER tri...

  • MySQL之触发器

    本文主要介绍MySQL中触发器的相关知识与应用,为什么使用触发器,以及如何使用触发器。 I、触发器简介 如果我们想...

  • MySQL优化

    mysql-基础-视图,存储过程,触发器 面试题 面试你所要知道的:MySQL存储过程 https://blog....

网友评论

      本文标题:看了你就会写的MySQL之触发器

      本文链接:https://www.haomeiwen.com/subject/zzytvctx.html