记第一次写存储过程

最近这个项目要进行压力测试,需要看历史告警,充值记录,订单数据三张表的查询及处理能力。于是,我的任务:三天之内往数据库中插入大量的数据

昨天上午,了解表与表之间的关联关系

昨天下午,开始了解存储过程并试着通过存储过程 插入与其他表无关联关系 的数据

晚上,被字符串与数字的拼接卡住了,各种百度不到,求助clover的结果是使用concat,终于成功了。然后简单了解了一下循环语句的使用

今天上午,开开心心的往数据库添数据,当然是偷懒了(有些数据之间有关联关系,比如商户表中用商户ID标识唯一,用户表中用用户ID标识唯一,还有张商户与用户中间表,记录他们的关联关系。每个商户关联只能关联一个用户,且一个用户只能关联一个商户,于是插数据的时候商户表的ID从100开始,用户表的ID也从100开始,这样中间表中插入数据时,商户ID与用户ID都从100开始且相等 。插入的数据都用这个套路。。。)

下午,鬼知道哪张表某个重要字段没加或者关联关系弄错了,插入的商户web页面全部无法显示,找不到原因,项目组也被我弄得很奔溃,只能重建数据库,旧数据库不小心被清了。。而后手工在web页面建了些基础数据。然后要利用这些基础数据创建其他数据,我的懒偷不成了。。只能另想办法。要解决的一个问题就是,组合两张表的数据,取出每一行并添加固定字段,插入另一张表中。

晚上聚餐,到家已九点,继续查查资料,百度时无意中看到游标,似乎就是用来实现这样的功能的。在我不懈的努力下,终于能够组合设备表和告警定义表并生成设备的历史告警表了,安心睡觉

明天是第三天,希望不要再出什么岔子了

总结:

1.MySQL基础不扎实,平时使用太少,连union,left join的用法都得百度确认一下,以后要多动手

2.不够细心,简单的语句都能经常出错

3.写的存储过程仅仅只是为了满足当前的需求,执行时间似乎不会很短,后续有时间再来学习一下性能优化之类的

4.想学好数据库真不容易


DELIMITER $

CREATE PROCEDURE insert_alarm()

BEGIN

DECLARE done INT;

DECLARE v_code,v_level,v_group,v_gunno INT(8);

DECLARE v_name,v_serialnum VARCHAR(30);

DECLARE my_cursor CURSOR FOR

SELECT *

FROM(SELECT alarm_code,alarm_name,alarm_level FROM `e_alarm_define`)AS a

CROSS JOIN

(SELECT group_id,serialnum,gunNo FROM`e_gun`)AS b;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

OPEN my_cursor;

posLoop:LOOP

IF done=1 THEN

LEAVE posLoop;

END IF;

FETCH  my_cursor INTO v_code,v_name,v_level,v_group,v_serialnum,v_gunno;

INSERT INTO `e_alarm_history`(alarm_code,alarm_name,alarm_level,group_id,serialnum,gun)

VALUES(v_code,v_name,v_level,v_group,v_serialnum,v_gunno);

END LOOP posLoop;

CLOSE my_cursor;

END

$$

创建历史告警表:

CALL insert_alarm()

你可能感兴趣的:(记第一次写存储过程)