1

我有一个errors包含以下列的表格 : id_error, product_id,error_code已经填满了一些错误。我用id_error作主键并添加了一个由列组成的 UNIQUE 索引,product_iderror_code确保不会有两个相同error_code的错误product_id。例如 :

+----------+------------+------------+
| error_id | product_id | error_code |
+----------+------------+------------+
|        1 |          4 |       1118 |
|        2 |          4 |       1119 |
|        3 |          4 |       1120 |
|        4 |          5 |       1121 |
+----------+------------+------------+

我想从 .csv 文件中导入错误列表,其中一些可能已经在errors表中。例如 :

product_id, error_code
4,1120
4,1121
5,1121
5,1122

为此,我正在使用 LOAD DATA 语句,这可以正常工作。例如 :

LOAD DATA LOCAL INFILE 'C:/Users/Public/Documents/updated_errors.csv'
IGNORE INTO TABLE errors
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@col1,@col2) set product_id=@col1,error_code=@col2;

结果,errors表格现在看起来像这样,这是预期的结果:

+----------+------------+------------+
| error_id | product_id | error_code |
+----------+------------+------------+
|        1 |          4 |       1118 |
|        2 |          4 |       1119 |
|        3 |          4 |       1120 |
|        4 |          5 |       1121 |
|        5 |          4 |       1121 |
|        6 |          5 |       1122 |
+----------+------------+------------+

但是,通过这样做,我会收到表中已经存在的每一行的警告,errors通知我 UNIQUE 键起作用:

2 row(s) affected, 2 warning(s):
1062 Duplicate entry '4-1120' for key 'errors.UNIQUE'
1062 Duplicate entry '5-1121' for key 'errors.UNIQUE'
Records: 4  Deleted: 0  Skipped: 2  Warnings: 2

我想使用 Labview 自动化这个过程,因为它适合我完成这个特定任务的工作流程。然而,我在 Labview 中用来访问我的数据库的库似乎不支持警告:它触发了一个错误,说我的查询是错误的。我通过直接在 Workbench 中运行查询来仔细检查查询,没有错误,只是前面提到的警告。

我还仔细检查了 Labview 方面的所有内容,其他请求似乎一切正常。似乎这个库将警告视为错误。

我尝试使用以下请求更改错误详细程度(打算在查询后将其更改回来),不幸的是,由于我使用的是云数据库,我认为我不能拥有 SUPER 特权或 SYSTEM_VARIABLES_ADMIN 特权。

SET GLOBAL log_error_verbosiy = 1
Error Code: 1227. Access denied; you need (at least one of) the SUPER or SYSTEM_VARIABLES_ADMIN privilege(s) for this operation

我尝试了主键和唯一键的不同组合以避免触发警告,同时保持防止我添加已经存在的错误但我没有成功的安全性。

我正在寻找一种方法来执行以下操作之一:

  • 避免使用 LOAD DATA 语句出现重复的警告
  • 使用不会触发任何警告的另一条语句将 .csv 文件导入表中。如果错误已经在表中,我在想可能是每行导入并检查每一行?
  • 还有其他解决方案可以实现我想做的吗?

编辑:我在 Labview 中使用 Ovak Technologies 的大数据数据库连接工具包

4

0 回答 0