Từ mã của bạn, có vẻ như "số nhận dạng duy nhất" của bạn (ít nhất cho mục đích chèn này) là (READING_DATE, READING_TIME, READING_ADDRESS)
.
Nếu bạn xác định một UNIQUE
như vậy nhập vào cơ sở dữ liệu của bạn rồi đến LOAD DATA
với IGNORE
từ khóa phải làm chính xác những gì bạn yêu cầu:
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)
;
(Ở đâu '???'
được thay thế bằng các chuỗi đại diện cho các định dạng ngày và giờ trong CSV của bạn).
Lưu ý rằng bạn thực sự nên lưu trữ READING_DATE
và READING_TIME
cùng nhau trong một DATETIME
duy nhất hoặc TIMESTAMP
cột:
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
;
Trong trường hợp đó, SET
mệnh đề của LOAD DATA
thay vào đó lệnh sẽ bao gồm:
READING_DATETIME = STR_TO_DATE(CONCAT(TRIM(@rec_0), ' ', TRIM(@rec_1)), '???')