【发布时间】:2020-08-22 14:52:02
【问题描述】:
我的 SQL 数据库由使用我的 SQL 连接器的 C 程序填充有问题。填充数据库的 C 代码的对应部分如下所示:
sprintf(query_table, "CREATE TABLE IF NOT EXISTS `%08X` (COUNTER INT NOT NULL AUTO_INCREMENT PRIMARY KEY, TIME TIMESTAMP(6) DEFAULT CURRENT_TIMESTAMP(6), DATA VARCHAR(16))", frame.can_id-0x80000000);
if (mysql_query(conn, query_table) != 0)
{
fprintf(stderr, "Query Failure; create tables from can log!\n");
return EXIT_FAILURE;
}
sprintf(query, "INSERT INTO `%08X` (TIME, DATA) VALUES (FROM_UNIXTIME(%ld.%06ld), '%02X%02X%02X%02X%02X%02X%02X%02X')",frame.can_id-0x80000000,tv.tv_sec,tv.tv_usec,frame.data[0],frame.data[1],frame.data[2],frame.data[3],frame.data[4],frame.data[5],frame.data[6],frame.data[7]);
//printf("%s",query);
if (mysql_query(conn, query) != 0)
{
fprintf(stderr, "Query Failure; insert into database!\n");
return EXIT_FAILURE;
}
frame.data 是一个子结构,它包含一个按字节排列的 8 字节十六进制值,由具有 250kbit 波特率的峰值 CAN 接口创建。如代码所示,DB 使用任何新的 CAN 报文 ID 验证对应的 DB 表的存在。如果不存在,则将创建该表。不幸的是,由于 CAN 软件的未知更改,无法预先分配表格。
经过两个月的测量期后,数据库得到了不同的电报和数据集。首先,一切看起来都很好,但仔细观察,就会发现一些不一致之处。附图1展示了3种不同的Cardinality-Auto-Increment-Issues案例来解释当前的情况。因此,我的 SQL 或 C 编程并不常见,我希望能得到一些好的建议来解决这个问题。
非常感谢德国,祝你一切顺利。
【问题讨论】:
标签: mysql c database auto-increment cardinality