针对数据表单写一个触发器

参考文章:https://www.cnblogs.com/fps2tao/p/10400936.html

1) 触发器的概念

简单的说,就是一张表发生了某件事(插入,删除,更新),然后自动触发了预先编写好的若干条SQL执行。

缺点就是难以维护,推荐在代码中处理逻辑。

 2)例子(创建一个触发器)

2.1 创建俩张表 user  和user_history

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;
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;

注意事项:

DELIMITER:改变输入的结束符,默认情况下输入结束符是分号;,这里把它改成了两个分号;;,这样做的目的是把多条含分号的语句做个封装,全部输入完之后一起执行,而不是一遇到默认的分号结束符就自动执行;

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

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

2.2 创建用户表添加数据事件对应的触发器

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 ;

2.3 创建用户表更新事件对应的触发器

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 ;

2.4 创建用户表 删除事件对应的触发器

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 ;

三个触发器写完以后 ,我们就可以去测试一下效果;

对用户表进行数据的增删改 ,观察 user_history的变化。

INSERT INTO user(account, name, address) VALUES ('user1', 'user1', 'user1');
INSERT INTO user(account, name, address) VALUES ('user2', 'user2', 'user2');

UPDATE user SET name = 'user3', account = 'user3', address='user3' where name='user1';

DELETE FROM `user` where name = 'user2';

2.5 如何查看MySQL中存在哪些触发器

 

2.6 删除触发器

drop trigger  触发器名;

2.7 像本文中用到的连接数据库工具是navicat ,那么可以直接在设计表的时候创建触发器。

可以参考:https://jingyan.baidu.com/article/36d6ed1f76ec9e1bcf4883aa.html

 

 

2.8 接下来我想补充的一点是如何在触发器中申明变量 ,给变量赋值。

business 表的id 和project表的 bid 关联。

 

 

 

创建一个触发器 ,(点击设计表,点击添加触发器。)

 

执行sql

INSERT INTO `project`(`bid`, `customer_name`, `project_name`, `project_group`, `project_address`, `project_leader`, `superior_manager`, `business_leader`, `project_checker`, `is_del`, `price`) VALUES (277, '客户名称2222', '项目名称33333', '111', '湖南', '测试人员66', '测试人员66', '测试人员66', '测试人员66', '0', 2.1200);

 

 

可以看到business 表的金额有变化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值