使用csv文件

时间:2018-03-09 06:52:32

标签: mysql json sql-update on-duplicate-key multiple-records

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,如果找到重复键

  1. 对于Marks_2017_update中的新json_key,不论" 0" /" -1"键值,将那些新的json_keys和json_value设置为" 0"。 (例如: - 第9课的作业和第10课的作业和测验,在Marks_2017中设为" 0"

  2. 如果json_value是" -1"不要更改Marks_2017中的json_value(如果json_key已存在)。

  3. 将Marks_2017 json_key值重置为" 0"如果Marks_2017_update json_key值为" 0"对于现有密钥(即10级重置标记,Halfyr_T到" 0"在Marks_2017中,值为" 0"对于10级,在Halfs_T中为Marks_2017_Update)

  4. - >对于新密钥,请使用默认值" 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;
    

0 个答案:

没有答案