OBSERVASI #1
Anda tidak boleh melakukan REPLACE
karena ini adalah DELETE
mekanis dan INSERT
.
Sebagai Dokumentasi MySQL mengatakan tentang REPLACE
Paragraf 2
Paragraf 5
Menggunakan REPLACE akan membuang nilai yang ditetapkan untuk TEST_ID yang tidak dapat digunakan kembali secara otomatis.
OBSERVASI #2
Tata letak tabel tidak akan mendukung perangkap kunci duplikat
Jika namanya unik, tabel harus ditata seperti ini
LAYOUT #1
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`),
KEY (`NAME`)
)
Jika sebuah nama memungkinkan beberapa nilai, tabel harus ditata seperti ini
LAYOUT #2
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`),
KEY (`NAME`,`VALUE`)
)
SOLUSI YANG DIUSULKAN
Gunakan tabel temp untuk menangkap semuanya. Kemudian, lakukan INSERT besar dari tabel temp berdasarkan tata letak
LAYOUT #1
Ganti VALUE
untuk NAME
Duplikat
USE oxygen_domain
DROP TABLE IF EXISTS `TESTLOAD`;
CREATE TABLE `TESTLOAD` SELECT NAME,VALUE FROM TEST WHERE 1=2;
LOAD DATA LOCAL INFILE 'C:/testData.txt'
INTO TABLE `TESTLOAD`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(NAME, VALUE);
INSERT INTO `TEST` (NAME, VALUE)
SELECT NAME, VALUE FROM `TESTLOAD`
ON DUPLICATE KEY UPDATE VALUE = VALUES(VALUE);
DROP TABLE `TESTLOAD`;
LAYOUT #2
Abaikan Duplikat (NAME,VALUE)
baris
USE oxygen_domain
DROP TABLE IF EXISTS `TESTLOAD`;
CREATE TABLE `TESTLOAD` SELECT NAME,VALUE FROM TEST WHERE 1=2;
LOAD DATA LOCAL INFILE 'C:/testData.txt'
INTO TABLE `TESTLOAD`
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(NAME, VALUE);
INSERT IGNORE INTO `TEST` (NAME, VALUE)
SELECT NAME, VALUE FROM `TESTLOAD`;
DROP TABLE `TESTLOAD`;
Perbarui
jika kita perlu menghindari membuat dan menjatuhkan tabel setiap saat. kita dapat MEMOTONG MENGORONG tabel sebelum atau sesudah menggunakan pernyataan INSERT...INTO. Oleh karena itu, kita tidak perlu membuat tabel lain kali.