mosquitto 数据导入mysql

安装mysql

参考文档
其实mysql是我第一个安装的软件,数字1和字母l让我吃尽了苦头。还有很多字母拼写总是或拼写错。后来还是没办法,用ssl链接系统。通过网页粘贴命令。

use database

创建数据表

信息数据录入表
create table mqttmes(
MS_id int not null primary key auto_increment comment’主键键’,
YG_id int not null ,
GD_id int not null,
GX_id int not null,
Up_time timestamp not null,
JG_shuliang int not null);

工序表
create table GX_list(
GX_id int not null primary key auto_increment comment’工序ID’,
GX_Mes char(20) );

工单表
create table GD_list(
GD_id int not null primary key auto_increment comment’工序ID’,
GX_1 int default 0,
GX_2 int default 0,
GX_3 int default 0,
GX_4 int default 0,
ZSH int not null);

员工表
create table YG_id(
YG_id int not null primary key auto_increment comment’员工ID’,
name char(20) not null,
sex int,
great char(20),
Msg char(200));

增加测试数据

员工表
insert into YG_id(name) values(‘1’);
insert into YG_id(name) values(‘2’);
insert into YG_id(name) values(‘3’);
insert into YG_id(name) values(‘4’);
insert into YG_id(name) values(‘a1’);
insert into YG_id(name) values(‘a2’);
insert into YG_id(name) values(‘a3’);
insert into YG_id(name) values(‘a4’);
insert into YG_id(name) values(‘b1’);
insert into YG_id(name) values(‘b2’);
insert into YG_id(name) values(‘b3’);
insert into YG_id(name) values(‘b4’);

select * from YG_id;

工单表
insert into GD_list(ZSH) values(100);
select * from GD_list;

信息表
insert into mqttmes(YG_id ,GD_id,GX_id, Up_time, JG_shuliang) values(1,3,4,now(),50);
select * from mqttmes;

增加触发函数

测试SQL update
update GD_list set GX_1=GX_1+2 where GD_id=1;

增加触发器
create trigger auto_total after insert on mqttmes for each row update GD_list set GX_1=GX_1+2 where GD_id=1;

增加加数据测试触发器效果

mysql> select * from GD_list;
±------±-----±-----±-----±-----±----+
| GD_id | GX_1 | GX_2 | GX_3 | GX_4 | ZSH |
±------±-----±-----±-----±-----±----+
| 1 | 8 | 0 | 0 | 0 | 100 |
| 2 | 2 | 0 | 0 | 0 | 200 |
| 3 | 2 | 0 | 0 | 0 | 500 |
±------±-----±-----±-----±-----±----+
3 rows in set (0.00 sec)

mysql> insert into mqttmes(YG_id ,GD_id,GX_id, Up_time, JG_shuliang) values(1,3,4,now(),50);
Query OK, 1 row affected (0.00 sec)

mysql> select * from GD_list;
±------±-----±-----±-----±-----±----+
| GD_id | GX_1 | GX_2 | GX_3 | GX_4 | ZSH |
±------±-----±-----±-----±-----±----+
| 1 | 10 | 0 | 0 | 0 | 100 |
| 2 | 2 | 0 | 0 | 0 | 200 |
| 3 | 2 | 0 | 0 | 0 | 500 |
±------±-----±-----±-----±-----±----+
3 rows in set (0.00 sec)

触发器正常可以运行

修改触发器,增加变量,

尝试改用存储过程

delimiter     C R E A T E P R O C E D U R E t o t a l G X a m o u n t ( I N p r Y G i d i n t , I N p r G D i d i n t , I N p r J G s h u l i a n g i n t ) B E G I N u p d a t e G D l i s t s e t G X 1 = G X 1 + p r J G s h u l i a n g w h e r e G D i d = p r G D i d ; i n s e r t i n t o m q t t m e s ( Y G i d , G D i d , G X i d , U p t i m e , J G s h u l i a n g ) v a l u e s ( p r Y G i d , 1 , p r G D i d , 4 , n o w ( ) , p r J G s h u l i a n g ) ; E N D    CREATE PROCEDURE total_GX_amount(IN pr_YG_id int,IN pr_GD_id int,IN pr_JG_shuliang int) BEGIN update GD_list set GX_1=GX_1+pr_JG_shuliang where GD_id=pr_GD_id; insert into mqttmes(YG_id ,GD_id,GX_id, Up_time, JG_shuliang) values(pr_YG_id,1,pr_GD_id,4,now(),pr_JG_shuliang); END   CREATEPROCEDUREtotalGXamount(INprYGidint,INprGDidint,INprJGshuliangint)BEGINupdateGDlistsetGX1=GX1+prJGshuliangwhereGDid=prGDid;insertintomqttmes(YGid,GDid,GXid,Uptime,JGshuliang)values(prYGid,1,prGDid,4,now(),prJGshuliang);END
delimiter ;

在存储过程中使用变量作为字段名。

参考
CREATE DEFINER=root@localhost PROCEDURE total_GX_amount(IN pr_YG_id int,IN pr_GD_id int,IN pr_GX_id VARCHAR(30),IN pr_JG_shuliang int)
BEGIN

SET @sqlStr:=CONCAT(“update GD_list set “,pr_GX_id,”=”,pr_GX_id,"+",pr_JG_shuliang," where GD_list.GD_id=",pr_GD_id);
SELECT @sqlStr;
PREPARE stmt from @sqlStr;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

END

CONCAT可以用字符串拼接一个sql语句

再次回到触发器

在存储过程中已经找到解决办法。
因为需要频繁的测试存储过程我装了一个图形mysql管理工具。发现触发器的也可以很好的在图形管理工具中进行调试。
参考
在这里插入图片描述
所以我有再次回到了触发器上进行。设计,这次我已经掌握new代表新更新的一条记录。比如new.id表示刚更新表的记录中id字段的数据。

我先做了一个小测试
在这里插入图片描述
在图形界面编辑 和编写和测试效率很高。还是用图形新界面的吧。

定义变量

参考
声明变量v_employee_name和v_employee_salary,通过SELECT…INTO语句查询指定记录并为变量赋值:

DECLARE v_employee_name VARCHAR(100);
DECLARE v_employee_salary DECIMAL(8,4);

SELECT employee_name, employee_salary
INTO v_employee_name, v_employee_salary
FROM employees

————————————————
版权声明:本文为CSDN博主「davide_tian」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jssg_tzw/article/details/39703889

csdn以为的链接
https://www.runoob.com/w3cnote/mysql-stored-procedure.html

触发器不支持动态sql
即使调用还有动态qsl的存储函数也不行,
存储过程可以支持动态函数
我计划使用“降维打击”的办法,把需要的动态字段用枚举的形式,放到一个表的一个字段的里。这样会增加表的数量,取的时候只要GROUP一下就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值