我正在尝试将文件加载到MySQL数据库,主键auto_incremented,如果我找到任何重复的行,我希望更新数据.但是,REPLACE关键字仅适用于主键,它是自动生成的,所以我卡住了.
如何能够拥有一个ID为auto_increments的表,同时能够使用LOAD DATA INFILE从文件中插入/更新数据?
这是表格
CREATE TABLE `oxygen_domain`.`TEST` (
`TEST_ID` int(11) NOT NULL AUTO_INCREMENT,
`NAME` varchar(255) NOT NULL,
`VALUE` varchar(255) DEFAULT NULL,
PRIMARY KEY (`TEST_ID`,`NAME`,`VALUE`)
)
Run Code Online (Sandbox Code Playgroud)
这是命令
LOAD DATA LOCAL INFILE 'C:/testData.txt'
REPLACE
INTO TABLE TEST
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(NAME, VALUE);
Run Code Online (Sandbox Code Playgroud)
这是样本数据
ignored name, ignored value
name1,value1
name2,value2
name3,value3
Run Code Online (Sandbox Code Playgroud)
用上述数据多次运行上述命令后所需的结束结果是
|TEST_ID |NAME |VALUE|
1, 'name1', 'value1'
2, 'name2', 'value2'
3, 'name3', 'value3'
Run Code Online (Sandbox Code Playgroud) 我正在优化一个涉及UNION ALL两个查询的查询.两种查询都经过优化,并且分别在不到一秒的时间内运行.但是,当我执行两者的并集时,计算所有内容大约需要30秒.
我不会与特定查询打扰你,因为他们得到他们进行了优化,因此,让我们给他们打电话Optimized_Query_1和 Optimized_Query_2
Optimized_Query_1的行数大约为100K
Optimized_Query_2的行数大约为200K
SELECT * FROM (
Optimized_Query_1
UNION ALL
Optimized_Query_2
) U
ORDER BY START_TIME ASC
Run Code Online (Sandbox Code Playgroud)
我确实要求结果按顺序排列,但我发现无论有没有ORDER BY,查询都需要花费尽可能多的时间,所以不应该有任何区别.
显然UNION ALL在内存中创建了一个临时表,然后从那里得到最终结果,有什么方法可以解决这个问题吗?
谢谢