2012-05-21 19 views
8

मेरे पास डेटाबेस में एक टेबल है, और मैं एक स्थानीय फ़ाइल पर एक कॉलम अपडेट करना चाहता हूं जिसे मैंने ऑफ़लाइन किया है। फ़ाइल स्वयं दो कॉलमस्थानीय फ़ाइल से MySQL तालिका अद्यतन करें

  1. एक आईडी जो तालिका में एक आईडी स्तंभ से मेल खाती है, और
  2. वास्तविक मूल्य है।

मैं

LOAD DATA INFILE 'file.txt' INTO TABLE table 
    FIELDS TERMINATED BY ',' 

का उपयोग कर नई पंक्तियाँ बनाने के लिए कर लिया है लेकिन मुझे यकीन है कि कैसे मैं विशेष रूप से इस तरह से मान सम्मिलित कर सकते हैं कि फ़ाइल के आईडी कॉलम से जुड़ा हुआ है नहीं कर रहा हूँ तालिका में आईडी कॉलम। क्या कोई एसक्यूएल सिंटैक्स के साथ मदद कर सकता है?

उत्तर

9

मेरा सुझाव है कि आप अपने डेटा को एक अस्थायी तालिका में लोड करें, फिर INSERT ... SELECT ... ON DUPLICATE KEY UPDATE का उपयोग करें; उदाहरण के लिए:

CREATE TEMPORARY TABLE temptable (
    id INT UNSIGNED NOT NULL, 
    val INT, 
    PRIMARY KEY (id) 
) ENGINE = MEMORY; 

LOAD DATA LOCAL INFILE '/path/to/file.txt' INTO temptable FIELDS TERMINATED BY ','; 

INSERT INTO my_table 
SELECT id, val FROM temptable 
ON DUPLICATE KEY UPDATE val = VALUES(val); 

DROP TEMPORARY TABLE temptable; 
6

एक और तरीका हो सकता है ...

जब से तुम पहले से ही पता तालिका नाम के रूप में अच्छी तरह से पहचान पत्र और वास्तविक मूल्य है ... आप क्या कर सकते है ... सीधे लिखना *.sql की तरह, updatescript.sql के रूप में फ़ाइल एक फ़ाइल में बयान अद्यतन करते हैं,

update mytable set value_col = value where ID_col = ID; 

Second Update Statement 

Third Update statement 

....... 

सहेजें की तरह और फिर

mysql -h <hostname> -u root -p <your_db_name> < "E:/scripts/sql/updatescript.sql" 
की तरह सीधे कि स्क्रिप्ट को निष्पादित
0

यह पंक्तियों की संख्या, पर निर्भर करता है यदि यह सैकड़ों में अद्यतन कॉलम की एक स्क्रिप्ट बनाता है और इसे चलाता है, लेकिन यदि यह बड़ी मात्रा में है, तो उस फ़ाइल को एक नई तालिका में आयात करें और अपनी तालिका को शामिल होने के साथ अपडेट करें, और उसके बाद तालिका

+0

ओह eggyal पहले से ही पोस्ट किया गया है जो मैं यहाँ बात कर रहा हूँ – PandeyTheDBA

संबंधित मुद्दे