存储过程
- 查询数据之后插入另外一张表格之中
insert into table(a,b)
select a,b from table2 where c = _c;
注: _c就是存储过程传递的参数值
2)find_in_set(id,ids) 的使用
第一次用这个函数, 效果跟in差不多 ,不过细细的研究之后发现, find_in_set更多的是当传变量的时候, 如果待查询的条件的常量 就用in 这样的性能会更高.
查询字段是主键的时候 会用到索引,只会查询部分数据,用in性能会更高
find_in_set 查询的是全部的数据,如果数据量很大的话 ,性能开销会很大;
用explain 解释功能可以查看查询的数据范围,type为range(部分) all(全部) ;
DROP PROCEDURE IF EXISTS `sp_history_s6000`;
delimiter ;;
CREATE PROCEDURE `sp_history_s6000`(IN ids LONGTEXT)
BEGIN
INSERT INTO t_monitor_s6000_history(`sendTime`, `type`, `value`, `createTime`)
SELECT NOW(), type, `value`, createTime
FROM t_monitor_s6000
WHERE 1 = 1 AND FIND_IN_SET(id, ids);
END
;;
delimiter ;
- 数据库事件
首先需要打开调度器
set global event_scheduler = 1;
查看是否开启
show variables like “event_scheduler”;
CREATE EVENT e_s6000_1d
ON SCHEDULE EVERY 1 DAY ON COMPLETION PRESERVE DO
CALL sp_insert_s6000_dev();
-- 如果存在则执行 --> DROP EVENT e_s6000_5m;
delimiter |
CREATE EVENT e_s6000_5m
ON SCHEDULE
EVERY 5 MINUTE
ON COMPLETION PRESERVE
DO
BEGIN
CALL sp_insert_s6000_serverNum();
CALL sp_insert_s6000_terminalNum();
END |