Av din kod framgår det att din "unika identifierare" (åtminstone för denna infogning) är den sammansatta
Om du definierar en sådan UNIQUE knappa in din databas och sedan LADDA DATA
med IGNORE nyckelordet ska göra exakt vad du behöver:
ALTER TABLE tbl_reading
ADD UNIQUE KEY (READING_DATE, READING_TIME, READING_ADDRESS)
;
LOAD DATA INFILE '/path/to/csv'
IGNORE
INTO TABLE tbl_reading
FIELDS
TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY ''
LINES
TERMINATED BY '\r\n'
(@rec_0, @rec_1, @rec_2, @rec_3, @rec_4, @rec_5, @rec_6, @rec_7, @rec_8)
SET
READING_DATE = DATE_FORMAT(STR_TO_DATE(TRIM(@rec_0), '???'), '%Y/%m/%d'),
READING_TIME = DATE_FORMAT(STR_TO_DATE(TRIM(@rec_1), '???'), '%H:%i:%s'),
READING_ADDRESS = TRIM(@rec_2),
CO2_SET_VALUE = TRIM(@rec_3),
CO2_PROCESS_VALUE = TRIM(@rec_4),
TEMP_SET_VALUE = TRIM(@rec_5),
TEMP_PROCESS_VALUE = TRIM(@rec_6),
RH_SET_VALUE = TRIM(@rec_7),
RH_PROCESS_VALUE = TRIM(@rec_8)
;
(Var '???' ersätts med strängar som representerar datum- och tidsformaten i din CSV).
Observera att du verkligen borde lagra READING_DATE och READING_TIME tillsammans i en enda DATETIME eller TIMESTAMP kolumn:
ALTER TABLE tbl_reading
ADD COLUMN READING_DATETIME DATETIME AFTER READING_TIME,
ADD UNIQUE KEY (READING_DATETIME, READING_ADDRESS)
;
UPDATE tbl_reading SET READING_DATETIME = STR_TO_DATE(
CONCAT(READING_DATE, ' ', READING_TIME),
'%Y/%m/%d %H:%i:%s'
);
ALTER TABLE tbl_reading
DROP COLUMN READING_DATE,
DROP COLUMN READING_TIME
;
I så fall SET satsen i LOAD DATA kommandot skulle inkludera istället:
READING_DATETIME = STR_TO_DATE(CONCAT(TRIM(@rec_0), ' ', TRIM(@rec_1)), '???')