Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

REPLACE और AUTO_INCREMENT . के साथ LOAD DATA INFILE करने का प्रयास कर रहा है

अवलोकन #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 कथन का उपयोग करने से पहले या बाद में तालिका। इसलिए, हमें अगली बार टेबल बनाने की जरूरत नहीं है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utf8_general_ci और utf8_unicode_ci में क्या अंतर हैं?

  2. PHP स्ट्रिंग अंतर और गतिशील प्रतिबंध

  3. डेटाबेस mysql में छवियों को सहेजना

  4. MySQL:अल्पविराम से अलग की गई सूची को कई पंक्तियों में विभाजित करें

  5. PHP 5.5.x . में पदावनत MySQL एक्सटेंशन