mysql存储过程和触发器 --- 一次很有意思的尝试
来源:互联网 发布:游戏开发用什么软件 编辑:程序博客网 时间:2024/05/01 11:18
ID money, 根据需要自己在添加字段来完成
销售业绩表 Salys
SID money 根据需要自己在添加字段来完成
关系是一个员工对应多个销售业绩
完成对这两个表的增删改查
当员工业绩达到10000时,系统自动锁定(员工今年的销售业绩优秀)
未达到10000的(员工信息表现一般或不及格)
(最好用触发器和存储过程)
网上看到这个题目,感觉很好玩,就自己试了一下。
用了一个多小时解决掉了,但是中途一个问题就用了快一个小时。感觉很有意思。
首先 建2张表,扩充字段。
DROP TABLE IF EXISTS `employees`;
CREATE TABLE `employees` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`money` int(11) NOT NULL,
`status` varchar(8) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
员工表增加一个状态。
DROP TABLE IF EXISTS `salys`;
CREATE TABLE `salys` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`sid` int(11) NOT NULL,
`money` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8;
销售表和员工表进行关联,多对一的关联。
然后多销售表建立触发器,自己建的是对新增数据进行触发。
DROP TRIGGER IF EXISTS t_afterinsert_on_Salys;
CREATE TRIGGER t_afterinsert_on_Salys
AFTER INSERT ON Salys
FOR EACH ROW
BEGIN
call p_parse(new.sid);
END;
触发调用存储过程,把新增的数据的员工id传到存储过程中。
然后建立存储过程:
DROP PROCEDURE IF EXISTS `p_parse`;
CREATE PROCEDURE p_parse(IN UID int)
BEGIN
DECLARE cnt int DEFAULT 0;
select sum(money) into cnt from Salys where sid = UID;
if(cnt>10000)then
update Employees set status ='优秀' where id = UID;
else
update Employees set status ='及格' where id = UID;
end if;
END;
最后进行测试:
insert into Salys(sid , money) VALUES(1,20000)
测试ok。
第一次写存储过程的时候入参参数定义为SID。然后测试的时候,发现当总额达标以后,后续其他数据只要有新增就更新成功。相应的统计sql在本地运行都可以。放到存储过程中一只统计了所有员工的总额,不是当前员工的总额。后续设置别名发现成功了,然后入参的名称修改一下也成功了。
具体原因没有深究,应该是判断条件sid=SID 存储过程给他判定为真导致的。命名不要和表字段重名。可能导致未知的奇葩问题。
- mysql存储过程和触发器 --- 一次很有意思的尝试
- 错误的触发器和正确的存储过程--mysql
- MySQL存储过程和触发器的实现--数据库学习笔记
- mysql存储过程、函数和触发器的创建
- MYSQL数据库的索引、视图、触发器、游标和存储过程
- [MySQL] 存储过程、函数、触发器和视图的权限检查
- [MySQL] 存储过程、函数、触发器和视图的权限检查
- MYSQL数据库的索引、视图、触发器、游标和存储过程
- mysql中的触发器和存储过程的区别是什么?
- MYSQL数据库的索引、视图、触发器、游标和存储过程
- MySQL存储过程、游标、触发器和视图的简单用法
- mysql中查看存储过程和触发器
- MYSQL 存储过程,游标和触发器
- mysql 自定义存储过程和触发器
- Mysql学习 - 触发器和存储过程
- Mysql 存储过程、函数和触发器
- mysql编程(存储过程和触发器)
- mysql中的函数 存储过程和触发器
- Xamarin Studio build event issue
- IO流_FileOutputStream写出数据加入异常处理
- 全排列Permutations
- response.setContentType()中MIME参数类型总结
- 万亿级数据洪峰下的分布式消息引擎
- mysql存储过程和触发器 --- 一次很有意思的尝试
- P1048 采药
- 通过SQL Server命令行启动及停止SQL服务的方法
- JVM(java 虚拟机)内存设置
- Leetcode——468. Validate IP Address
- [ SSH 两种验证方式原理 ]
- 关于安卓开发关闭系统软键盘问题
- java基本语法-static关键字
- mongodb的启动及相关操作