अवलोकन #1
आपको REPLACE
नहीं करना चाहिए क्योंकि यह एक यांत्रिक DELETE
है और INSERT
।
MySQL Documentation के रूप में REPLACE के बारे में कहते हैं
पैराग्राफ 2
पैराग्राफ 5
REPLACE का उपयोग करने से TEST_ID के स्थापित मान हट जाएंगे जिनका स्वचालित रूप से पुन:उपयोग नहीं किया जा सकता है।
अवलोकन #2
टेबल लेआउट डुप्लीकेट कुंजियों को ट्रैप करने का समर्थन नहीं करेगा
यदि कोई नाम अद्वितीय है, तो तालिका इस प्रकार रखी जानी चाहिए
लेआउट #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`)
)
यदि कोई नाम एकाधिक मानों की अनुमति देता है, तो तालिका इस प्रकार रखी जानी चाहिए
लेआउट #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`)
)
प्रस्तावित समाधान
सब कुछ पकड़ने के लिए एक अस्थायी तालिका का प्रयोग करें। फिर, लेआउट के आधार पर अस्थायी तालिका से एक बड़ा INSERT निष्पादित करें
लेआउट #1
VALUE
बदलें डुप्लीकेट NAME
. के लिए
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`;
लेआउट #2
डुप्लिकेट पर ध्यान न दें (NAME,VALUE)
पंक्तियाँ
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`;
अपडेट करें
अगर हमें हर बार टेबल बनाने और छोड़ने से बचना है। हम TRUNCATE को TRUNCATE कर सकते हैं INSERT... INTO कथन का उपयोग करने से पहले या बाद में तालिका। इसलिए, हमें अगली बार टेबल बनाने की जरूरत नहीं है।