Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 数据库表中的更新操作出现问题_Mysql_Arduino_Esp32 - Fatal编程技术网

Mysql 数据库表中的更新操作出现问题

Mysql 数据库表中的更新操作出现问题,mysql,arduino,esp32,Mysql,Arduino,Esp32,我在数据库表中面临更新操作问题。有时更新查询不成功,网关端的MySql库(MySql\u MariaDB\u Generic)显示错误“MySql\u数据包::read\u数据包:错误:等待客户端超时” 我使用的是AWS RDS服务器的MYSQL数据库。MYSQL版本是8.0.20。查询是从ESP32 Wi-Fi模块执行的 在我的网关应用程序中,由于数据量较大(约10k),我将分3步为3个数据字段插入数据。首先,我插入一条记录,然后通过更新查询添加更多数据。每次插入查询都成功,但更新查询有时会失

我在数据库表中面临更新操作问题。有时更新查询不成功,网关端的MySql库(MySql\u MariaDB\u Generic)显示错误“MySql\u数据包::read\u数据包:错误:等待客户端超时”

我使用的是AWS RDS服务器的MYSQL数据库。MYSQL版本是8.0.20。查询是从ESP32 Wi-Fi模块执行的

在我的网关应用程序中,由于数据量较大(约10k),我将分3步为3个数据字段插入数据。首先,我插入一条记录,然后通过更新查询添加更多数据。每次插入查询都成功,但更新查询有时会失败,即使我连续重试10次

这个问题并不总是发生。它是随机发生的。有时它在7到8个小时内工作正常,然后又开始行为不端

服务器似乎没有响应。出于调试目的,我通过执行查询“show processlist;”检查了数据库服务器上的进程列表,发现同一查询有多个进程的状态为“update”。这可能是由于网关多次重试造成的。我无法确定这是否是预期的行为(多个状态为“更新”的相同查询)。请参阅随附的屏幕截图

[数据库服务器进程列表][1]

我们想了解为什么这种情况只是偶尔发生,而不是总是发生,以及它是如何恢复的?服务器端是否有导致这种行为的因素?我们是否需要进行任何配置?请提供任何指导

供您参考:

我使用了ESP32 Wi-Fi模块上的MySQL_MariaDB_通用库将数据发送到数据库。数据库表包含7个数据字段,如Id、时间戳、P1、P2、P3、P4和P5。这里的“Id”是主键和自动增量属性

这里,数据字段P3、P4和P5的数据类型为MEDIUMBLOB

用于插入数据字段时间戳P1、P2、P3的查询:

INSERT INTO TabelXYZ(Timestamp, P1, P2, P3)VALUES ('TimestampValue','P1Value','P2Value','P3Value');
要插入数据字段P4的查询:

UPDATE TabelXYZ SET P4 = 'P4Value' WHERE Timestamp = 'TimestampValue' ORDER BY Timestamp;
UPDATE TabelXYZ SET P5 = 'P5Value' WHERE Timestamp = 'TimestampValue' ORDER BY Timestamp;
要插入数据字段P4的查询:

UPDATE TabelXYZ SET P4 = 'P4Value' WHERE Timestamp = 'TimestampValue' ORDER BY Timestamp;
UPDATE TabelXYZ SET P5 = 'P5Value' WHERE Timestamp = 'TimestampValue' ORDER BY Timestamp;
请注意,这里没有internet连接问题,因为插入查询每次都执行OK,只有更新查询失败


我无法找到其背后的任何根本原因。请告诉我是否有人对我的错误有任何建议/想法。

您正在更新所有行,这需要时间,如果确实需要,请增加时间。这是一个数据库设计问题,而不是与Arduino或ESP32有关。1)您不需要插入时间戳,设计n创建记录时,时间戳将自动插入数据库;2)由于数据库中的时间戳字段未编制索引,因此速度变慢,最好使用用户ID字段进行更新,因为它是唯一的(自动递增)且已编制索引。