it-swarm.asia

MySQL - تحديث CSV (وليس INSERT) في الجدول الموجود؟

لدي جدول بالأعمدة التالية:

id | name | city

يحتوي الجدول على 1000 إدخال.

لدي ملف CSV بعدد محدود من الأسطر مثل:

id,city
34,Denver
45,Kansas City
145,New York

هل يمكنني استخدام LOAD DATA INFILE لاستيراد ملف CSV إلى الجدول الخاص بي ولكن بدلاً من إدراج إدخالات جديدة ، يتم تحديث الصفوف استنادًا إلى العمود id؟

7
Jake Wilson

REPLACE يعمل ميكانيكيًا DELETE و INSERT. قد يغير ذلك المفاتيح الأساسية.

هنا شيء آخر يمكنك القيام به.

لنفترض أن جدولك يسمى name_city ويبدو كالتالي:

CREATE TABLE name_city
(
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(30) NOT NULL,
    city VARCHAR(30) NOT NULL,
    PRIMARY KEY (id)
);

وتريد أن تفعل LOAD DATA INFILE.

فيما يلي خطواتك لتحديث المدينة بناءً على المعرّف:

الخطوة 01) إنشاء جدول آخر لاستخدامه في الاستيراد

CREATE TABLE name_city_import LIKE name_city;

الخطوة 02) قم بإسقاط عمود الاسم من جدول الاستيراد

ALTER TABLE name_city_import DROP COLUMN name;

الخطوة 03) قم بإجراء الاستيراد إلى name_city_import

LOAD DATA INFILE 'somefile.csv' INTO TABLE name_city_import ...

الخطوة 04) قم بإجراء تحديث

UPDATE name_city_import B
INNER JOIN name_city A USING (id)
SET A.city = B.city;

الخطوة 05) قم بإزالة جدول الاستيراد

DROP TABLE name_city_import;

هذا هو.

جربها !!!

6
RolandoMySQLDBA

إذا كان لديك فهرس فريد على معرف أو كان مفتاحًا أساسيًا ، فيمكنك إضافة REPLACE: LOAD DATA INFILE 'file_name' REPLACE ....

0
a1ex07