我有一个errors
包含以下列的表格 : id_error
, product_id
,error_code
已经填满了一些错误。我用id_error
作主键并添加了一个由列组成的 UNIQUE 索引,product_id
以error_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 的大数据数据库连接工具包