最近这个项目要进行压力测试,需要看历史告警,充值记录,订单数据三张表的查询及处理能力。于是,我的任务:三天之内往数据库中插入大量的数据
昨天上午,了解表与表之间的关联关系
昨天下午,开始了解存储过程并试着通过存储过程 插入与其他表无关联关系 的数据
晚上,被字符串与数字的拼接卡住了,各种百度不到,求助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()