2012-05-21 20 views
8

Veritabanındaki bir tablonun var ve yerel bir dosyada çevrimdışı olan bir sütunu güncellemek istiyorum. Dosyanın kendisi iki sütunMySQL tablosunu yerel bir dosyadan güncelle

  1. tabloda Kimlik sütunu karşılık gelen bir kimlik ve
  2. gerçek değeri vardır.

Ben

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

kullanılarak yeni satırlar oluşturmak mümkün oldum Ama özellikle dosyadaki kimlik sütunu birleştirilmiştir şekilde değerleri ekleyebilirsiniz emin değilim Tablodaki ID sütunu. Birisi SQL sözdizimi ile yardımcı olabilir mi?

cevap

9

Verilerinizi geçici bir tabloya yüklemenizi öneririm, ardından INSERT ... SELECT ... ON DUPLICATE KEY UPDATE; örneğin:

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

bir başka yolu olabilir ...

Zaten tablo adı hem kimliği ve gerçek değere sahip bildiğimiz için ... ne yapabilirim olduğunu ... doğrudan yazar updatescript.sql gibi *.sql olarak

update mytable set value_col = value where ID_col = ID; 

Second Update Statement 

Third Update statement 

....... 

Kaydet gibi, bir dosyada dosya beyanları güncelleme ve sonra

mysql -h <hostname> -u root -p <your_db_name> < "E:/scripts/sql/updatescript.sql" 
gibi doğrudan bu senaryoyu yürütmek
0

Satırların hiçbirine bağlı değildir, Yüzlerce bir güncelleme sütunu komut dosyası hazırlayıp çalıştırırsanız, ancak büyük hacimli içeriyorsa, bu yeni bir tabloya kaydedilir ve birleştirme ile tablonuzu güncelleştirir. ve daha sonra tabloyu

+0

bırakın. Ohh eggyal zaten burada konuştuğum şeyi gönderdi – PandeyTheDBA

İlgili konular