Marks_2017.csv
Name, class, Marks
"a1", 9, '{"Halfyr_T" : "45", "Halfyr_P" : "35", "Annual_T" : "42", "Annual_P" : "40"}'
"a2", 9, '{"Halfyr_T" : "45", "Halfyr_P" : "35", "Annual_T" : "42", "Annual_P" : "40"}'
"a3", 9, '{"Halfyr_T" : "45", "Halfyr_P" : "35", "Annual_T" : "42", "Annual_P" : "40"}'
"b1", 10, '{"Halfyr_T" : "45", "Halfyr_P" : "35", "Annual_T" : "42", "Annual_P" : "40"}'
"b2", 10, '{"Halfyr_T" : "45", "Halfyr_P" : "35", "Annual_T" : "42", "Annual_P" : "40"}'
"b3", 10, '{"Halfyr_T" : "45", "Halfyr_P" : "35", "Annual_T" : "42", "Annual_P" : "40"}'
Marks_2017_Update.csv
Name, class, Marks
"a1", 9, '{"Halfyr_T" : "-1", "Halfyr_P" : "-1", "Annual_T" : "-1", "Annual_P" : "-1", "Assignment" : "0"}'
"a2", 9, '{"Halfyr_T" : "-1", "Halfyr_P" : "-1", "Annual_T" : "-1", "Annual_P" : "-1", "Assignment" : "0"}'
"a3", 9, '{"Halfyr_T" : "-1", "Halfyr_P" : "-1", "Annual_T" : "-1", "Annual_P" : "-1", "Assignment" : "0"}'
"b1", 10, '{"Halfyr_T" : "0", "Halfyr_P" : "-1", "Annual_T" : "-1", "Annual_P" : "-1", "Assignment" : "0", "Quiz" : "-1"}'
"b2", 10, '{"Halfyr_T" : "0", "Halfyr_P" : "-1", "Annual_T" : "-1", "Annual_P" : "-1", "Assignment" : "0", "Quiz" : "-1"}'
"b3", 10, '{"Halfyr_T" : "0", "Halfyr_P" : "-1", "Annual_T" : "-1", "Annual_P" : "-1", "Assignment" : "0", "Quiz" : "-1"}'
"c1", 8, '{"Halfyr_T" : "0", "Halfyr_P" : "0", "Annual_T" : "0", "Annual_P" : "0", "Assignment" : "-1"}'
"c2", 8, '{"Halfyr_T" : "0", "Halfyr_P" : "0", "Annual_T" : "0", "Annual_P" : "0", "Assignment" : "-1"}'
"c3", 8, '{"Halfyr_T" : "0", "Halfyr_P" : "0", "Annual_T" : "0", "Annual_P" : "0", "Assignment" : "-1"}'
参考解决方案我试图遵循:
MySQL LOAD DATA INFILE with ON DUPLICATE KEY UPDATE
- > key是name_class
- >在插入Marks_2017(ON DUPLICATE KEY)期间,使用Marks_2017_Update,如果找到重复键
对于Marks_2017_update中的新json_key,不论" 0" /" -1"键值,将那些新的json_keys和json_value设置为" 0"。 (例如: - 第9课的作业和第10课的作业和测验,在Marks_2017中设为" 0"
如果json_value是" -1"不要更改Marks_2017中的json_value(如果json_key已存在)。
将Marks_2017 json_key值重置为" 0"如果Marks_2017_update json_key值为" 0"对于现有密钥(即10级重置标记,Halfyr_T到" 0"在Marks_2017中,值为" 0"对于10级,在Halfs_T中为Marks_2017_Update)
- >对于新密钥,请使用默认值" 0"将记录插入Marks_2017。 (例如: - 对于第8课,Marks_2017_Update中的分配,值为" -1",仍然,在Marks_2017中,它插入" 0",因为它是一个新记录。)
在检查json_key并更新其值时主要面临问题。
尝试使用json_extract,json_set和json_merge。但无法解决我的要求。
- 创建db
CREATE SCHEMA IF NOT EXISTS `allmarks` DEFAULT CHARACTER SET utf8 ;
USE `allmarks` ;
- 根据csv文件的表模式
CREATE TABLE IF NOT EXISTS Marks_2017 (
`Name` VARCHAR(255) NOT NULL,
`class` INT(2) NOT NULL,
`Marks` JSON NOT NULL,
UNIQUE INDEX `Marks_2017_index` (`Name` ASC, `class` ASC));
- 粘贴上述输出路径中的文件 显示变量类似于" secure_file_priv&#34 ;;
- 将csv_file数据导入表
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Marks_2017.csv'
INTO TABLE Marks_2017
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\''
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;
- 将csv_file数据导入更新表以更新主数据
CREATE TEMPORARY TABLE Marks_2017_Update SELECT * FROM Marks_2017 WHERE 1=0; -- where 1=0 will drop all the existing indexes
LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Marks_2017_Update.csv'
INTO TABLE Marks_2017_Update
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\''
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;