ฉันจะนำเข้าไฟล์ CSV ลงในตาราง MySQL ได้อย่างไร


306

ฉันมีเหตุการณ์ที่ผิดปกติ - CSV CSV จากลูกค้าที่ฉันพยายามโหลดลงในตาราง MySQL เพื่อให้ฉันสามารถ refactor ในรูปแบบสติ ฉันสร้างตารางชื่อ 'CSVImport' ซึ่งมีหนึ่งฟิลด์สำหรับทุกคอลัมน์ของไฟล์ CSV CSV มี 99 คอลัมน์ดังนั้นนี่จึงเป็นงานที่ยากพอตัว:

CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);

ไม่มีข้อ จำกัด ในตารางและเขตข้อมูลทั้งหมดมีค่า VARCHAR (256) ยกเว้นคอลัมน์ที่มีจำนวน (แทนด้วย INT), ใช่ / ไม่ใช่ (แทนด้วย BIT), ราคา (แสดงโดย DECIMAL) และข้อความว่างเปล่า ( แสดงโดย TEXT)

ฉันพยายามโหลดข้อมูลลงในไฟล์:

LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023  Deleted: 0  Skipped: 0  Warnings: 198256
SELECT * FROM CSVImport;
| NULL             | NULL        | NULL           | NULL | NULL               | 
...

NULLตารางทั้งเต็มไปด้วย

ฉันคิดว่าปัญหาคือข้อความผิดพลาดมีมากกว่าหนึ่งบรรทัดและ MySQL แยกวิเคราะห์ไฟล์ราวกับว่าแต่ละบรรทัดใหม่จะสอดคล้องกับหนึ่งแถว databazse ฉันสามารถโหลดไฟล์ลงใน OpenOffice ได้โดยไม่มีปัญหา

ไฟล์ clientdata.csv มี 2593 บรรทัดและ 570 รายการ บรรทัดแรกมีชื่อคอลัมน์ ฉันคิดว่ามันคั่นด้วยจุลภาคและเห็นได้ชัดว่าข้อความคั่นด้วย doublequote

UPDATE:

หากมีข้อสงสัยให้อ่านคู่มือ: http://dev.mysql.com/doc/refman/5.0/en/load-data.html

ฉันเพิ่มข้อมูลลงในLOAD DATAคำสั่งที่ OpenOffice ฉลาดพอที่จะอนุมานได้และตอนนี้มันโหลดจำนวนเร็กคอร์ดที่ถูกต้อง:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

แต่ยังมีNULLระเบียนจำนวนมากและไม่มีข้อมูลใดที่ถูกโหลดดูเหมือนว่าจะถูกที่แล้ว


17
และถ้าคุณใช้ OSX Sequel Proมีเครื่องมือนำเข้าที่ยอดเยี่ยมและเป็นฟรี ;-)
Merrick

41
มันวิเศษมากสำหรับฉันที่โปสเตอร์ดั้งเดิมตอบคำถามของเขาเองดีกว่าคนอื่น ... ฉันไม่รู้ว่าทำไมผู้คนมากมายพร้อมที่จะให้คำแนะนำซอฟต์แวร์เมื่อมีคำสั่ง SQL ที่มีอยู่ซึ่งสามารถเขียนโปรแกรมได้มากกว่า UI -ซึ่งเป็นรากฐาน. ฉันไม่รู้เกี่ยวกับคนอื่น แต่มีความหมายทางโปรแกรมสำหรับฉันที่ฉันสามารถตั้งค่าสคริปต์ให้นำเข้าไฟล์อัตโนมัติในเวลาบันทึกในขณะที่ใช้ UI เป็นคู่มือล้วนๆ
Chris Cirefice

@ChrisCirefice: ฉันคิดว่าคำตอบที่ได้รับการยอมรับอธิบายได้ดี เขาต้องการความช่วยเหลือด้วยตนเองในการสร้างคำสั่ง 'ข้อมูลโหลด' ซึ่งโปรแกรมกราฟิกสามารถช่วยได้ เมื่อโปรแกรมกราฟิกสร้างคำสั่ง 'โหลดข้อมูล' แล้วเขาสามารถนำโปรแกรมนั้นกลับมาใช้ใหม่ได้
AlexC

@ Merrick นี่ใช้งานได้กับ osx
weaveoftheride

ผมเขียนกวดวิชาอย่างกว้างขวางในการโหลดข้อมูล CSV เข้า MySQLพร้อมกับเครื่องมือเครื่องกำเนิดไฟฟ้าไวยากรณ์ใน Excel
mysql_user

คำตอบ:


133

หลักของปัญหาของคุณดูเหมือนจะตรงกับคอลัมน์ในไฟล์ CSV กับที่อยู่ในตาราง

ไคลเอนต์แบบกราฟิก mySQL จำนวนมากมีกล่องโต้ตอบการนำเข้าที่ดีมากสำหรับสิ่งนี้

สิ่งที่ฉันโปรดปรานสำหรับงานนี้คือ Windows HeidiSQL มันทำให้คุณมีส่วนต่อประสานกราฟิกเพื่อสร้างLOAD DATAคำสั่ง คุณสามารถใช้ซ้ำได้ในภายหลังโดยทางโปรแกรม

นำเข้าเท็กซ์ไฟล์

สกรีนช็อต: กล่องโต้ตอบ "นำเข้าข้อความ"

หากต้องการเปิดกล่องโต้ตอบนำเข้าข้อความ "ให้ไปที่Tools > Import CSV file:

ป้อนคำอธิบายรูปภาพที่นี่


25
สำหรับ Mac OSX ให้ใช้ Sequel Pro
Agi Hammerthief

3
ฉันเพิ่งลองและต้องการให้ฉันสร้างตารางก่อน ... แทนที่จะใช้ชื่อคอลัมน์
Dominique

3
คุณต้องเลือกตารางก่อนที่คุณจะสามารถดำเนินการต่อ ... และเนื่องจากจุดทั้งหมดไม่จำเป็นต้องทำตาราง ...
Dominique

3
โปรดทราบว่าใน Linux, HeidiSQL ทำงานได้ดีภายใต้ Wine
AlejandroVD

1
@ พอลจุดสำคัญของคำตอบก็คือเครื่องมือ GUI สามารถทำให้การจับคู่คอลัมน์นำเข้ากับคอลัมน์ตารางง่ายขึ้น
Pekka

191

ใช้mysqlimportเพื่อโหลดตารางลงในฐานข้อมูล:

mysqlimport --ignore-lines=1 \
            --fields-terminated-by=, \
            --local -u root \
            -p Database \
             TableName.csv

ฉันพบมันที่http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

ในการทำให้ตัวคั่นแท็บใช้ --fields-terminated-by='\t'


6
mysqlimportใช้LOAD DATA INFILE...เบื้องหลังดังนั้นมันก็เหมือนกันมาก
Mladen Jablanović

8
เช่นเดียวกับที่คุณจะต้องสร้างตารางก่อนที่คุณจะสามารถใช้LOAD DATA INFILE mysqlimport
Marcus Downing

@ MladenJablanovićมันไม่เหมือนกันแน่นอน ลองนำเข้าแถว 1bil คุณจะประหลาดใจว่ามันมีความแตกต่างอย่างมากในแง่ของประสิทธิภาพการทำงาน
ninjabber

@ninjabber เอกสารกล่าวว่า ลูกค้า mysqlimport ให้อินเตอร์เฟซบรรทัดคำสั่งเพื่อโหลดข้อมูล INFILEดังนั้นมันจึงเป็นทฤษฎีLOAD DATA INFILEเป็นไปไม่ได้ที่จะนำเสนอผลประโยชน์ใด ๆ
Mladen Jablanović

1
ยังต้องการ--fields-optionally-enclosed-by=\"และ `- ฟิลด์หนีโดย = \ '
chaintng

80

วิธีที่ง่ายที่สุดที่ฉันได้นำเข้า 200 แถวอยู่ด้านล่างคำสั่งในหน้าต่าง phpmyadmin sql

ฉันมีตารางประเทศง่าย ๆ ที่มีสองคอลัมน์ CountryId, CountryName

นี่คือข้อมูล. csvไฟล์ CSV

นี่คือคำสั่ง:

LOAD DATA INFILE 'c:/country.csv' 
INTO TABLE country 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

โปรดระลึกถึงสิ่งหนึ่งไว้ไม่ปรากฏในคอลัมน์ที่สองมิฉะนั้นการนำเข้าของคุณจะหยุด


1
',' -> '\ t', '"' -> '' ในกรณีของไฟล์ TSV และลบบรรทัดสุดท้ายหากไม่มีส่วนหัว (หวังว่าโปรแกรมรวบรวมข้อมูลค้นหาดัชนีนี้)
นิ้วเลือดออก

16
LOAD DATA LOCAL INFILEถ้ามันเป็นไฟล์ท้องถิ่นคุณอาจต้อง หากนี่โยนข้อผิดพลาด 1148 "คำสั่งที่ใช้ไม่ได้รับอนุญาต" คุณสามารถเปิดใช้งานได้โดยการเรียกใช้ MySQL --local-infileในบรรทัดคำสั่งด้วย
บิ๊ก McLargeHuge

ฉันได้รับข้อผิดพลาด: ข้อผิดพลาด 1045 (28000): การเข้าถึงถูกปฏิเสธสำหรับผู้ใช้ 'ผู้ใช้' @ '%' (ใช้รหัสผ่าน: ใช่)
ARUNBALAN NV

คุณต้องให้สิทธิ์การเข้าถึงแก่ผู้ใช้ทั้งหมดจากแผงควบคุมจากนั้นลองนำเข้าสคริปต์
DareDevil

1
ฉันได้รับข้อผิดพลาดนี้: เซิร์ฟเวอร์ MySQL กำลังทำงานกับตัวเลือก --secure-file-priv ดังนั้นจึงไม่สามารถดำเนินการตามคำสั่งนี้ได้
Agniswar Bakshi

66

ฉันรู้ว่าคำถามจะเก่าแต่ผมอยากจะแบ่งปันนี้

ฉันใช้วิธีนี้เพื่อนำเข้ามากกว่า 100K บันทึก ( ~ 5MB ) ใน0.046 วินาที

นี่คือวิธีที่คุณทำ:

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

มันเป็นสิ่งสำคัญมากที่จะรวมบรรทัดสุดท้ายหากคุณมีมากกว่าหนึ่งช่องเช่นปกติแล้วจะข้ามเขตข้อมูลสุดท้าย (MySQL 5.6.17)

LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);

จากนั้นสมมติว่าคุณมีแถวแรกเป็นชื่อเรื่องสำหรับเขตข้อมูลของคุณคุณอาจต้องการรวมบรรทัดนี้ด้วย

IGNORE 1 ROWS

นี่คือลักษณะถ้าไฟล์ของคุณมีแถวส่วนหัว

LOAD DATA LOCAL INFILE  
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table  
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(field_1,field_2 , field_3);

ฉันนำเข้าแถว 16k และ 48 คอลัมน์ ขอบคุณเพื่อน
Renjith VR

นี่คือทางออกที่ดีที่สุด สำหรับใครที่อยากรู้ว่ามันเร็วแค่ไหน: ฉันนำเข้า 3.2 ล้านแถวในเวลาไม่ถึง 14 วินาทีบนอินสแตนซ์ของไฟ AWS $ 20 / เดือน AWS พร้อมเซิร์ฟเวอร์ MySQL ออนบอร์ด (ไม่ใช่ RDS ประสิทธิภาพสูง) ! น่ากลัว
master_gracey

ในบรรทัด(field_1,field_2 , field_3);นี้มันอ้างถึงรายการของคอลัมน์ในไฟล์. csv หรือในตารางหรือไม่? เช่นเขตข้อมูลเหล่านี้คืออะไร
tera_789

@ tera_789 ไฟล์ที่อยู่ในไฟล์ csv ของคุณที่อาจจะตรงกับตารางของคุณ
Fahad

ต้องปฏิบัติตามรูปแบบข้อมูล ตัวอย่าง (สำหรับกรณีของฉัน) <pre> ชื่อแรก, นามสกุล _, เลขประจำตัว, หมายเลขโทรศัพท์, อีเมล, ชื่อ, นามสกุล, 12-05-2018,54545, faiz @ gmail.com, ชื่อ 1, นามสกุล 1, 2,018-05-12,456, faiz1 @ gmail .com, name2, lastName2,2018-05-12,456, faiz2 @ gmail.com, name3, lastName3,2018-05-22,456, faiz3 @ gmail.com, name4, lastName4,1988-05-22,456, faiz4 @ gmail.com , name5, lastName51919-05-22,456, faiz5 @ gmail.com, name6, lastName6,1987-05-21,456, faiz6 @ gmail.com </pre>
Faiz Ahmed

32

phpMyAdminสามารถรองรับการนำเข้า CSV นี่คือขั้นตอน:

  1. เตรียมไฟล์ CSV เพื่อให้มีเขตข้อมูลในลำดับเดียวกันกับเขตข้อมูลตาราง MySQL

  2. ลบแถวส่วนหัวออกจาก CSV (ถ้ามี) เพื่อให้มีเฉพาะข้อมูลในไฟล์

  3. ไปที่อินเทอร์เฟซ phpMyAdmin

  4. เลือกตารางในเมนูด้านซ้าย

  5. คลิกปุ่มนำเข้าที่ด้านบน

  6. เรียกดูไฟล์ CSV

  7. เลือกตัวเลือก "CSV โดยใช้โหลดข้อมูล"

  8. ป้อน "," ในช่อง "ถูกยกเลิกโดย"

  9. ป้อนชื่อคอลัมน์ตามลำดับเดียวกับที่อยู่ในตารางฐานข้อมูล

  10. คลิกที่ปุ่มไปและคุณทำเสร็จแล้ว

นี่คือบันทึกย่อที่ฉันเตรียมไว้สำหรับการใช้ในอนาคตของฉันและแบ่งปันที่นี่หากคนอื่นได้รับประโยชน์


มันดีและเรียบง่าย ฉันชอบสร้างตารางและคอลัมน์ผ่าน SQL (ดังนั้นฉันข้ามขั้นตอนที่ # 9) และแทรกข้อมูลผ่านการนำเข้า CSV อย่าลืมตั้งค่าNULLใน CSV สำหรับฟิลด์ / คอลัมน์ที่เพิ่มขึ้นอัตโนมัติ
เงิน

โปรดทราบว่า phpMyAdmin ล้มเหลวอย่างน่าสังเวชเมื่อ Cyrillic chars รวมอยู่ในไฟล์ CSV ไม่ว่าคุณจะบอกให้ใช้ utf-8
Fran Marzoa

อย่าลืมเปลี่ยนขนาดการนำเข้าหากคุณกำลังนำเข้าไฟล์ CSV ขนาดใหญ่ BTW มันไม่ใช่ตัวเลือกที่ดีสำหรับไฟล์ CSV ขนาดใหญ่
Avi

สิ่งนี้ต้องการการดาวน์โหลดไฟล์. csv ไปยังเว็บไคลเอ็นต์ก่อนเนื่องจากคุณไม่สามารถเรียกดูไฟล์ csv ในเครื่องได้
mckenzm

ใช่คุณสามารถคุณจะต้องทำเครื่องหมายในช่องทำเครื่องหมาย 'ท้องถิ่น keyword' และคุณสามารถใช้ไฟล์ CSV ท้องถิ่น
chrisfs

12

คุณสามารถแก้ไขได้โดยการแสดงรายการคอลัมน์ในคำสั่งโหลดข้อมูลของคุณ จากคู่มือ :

LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);

... ดังนั้นในกรณีของคุณคุณต้องแสดงรายการ 99 คอลัมน์ตามลำดับที่ปรากฏในไฟล์ csv


8

ลองสิ่งนี้มันใช้งานได้สำหรับฉัน

    LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 ROWS;

IGNORE 1 ROWS ที่นี่จะไม่สนใจแถวแรกที่มีชื่อฟิลด์ โปรดทราบว่าสำหรับชื่อไฟล์คุณต้องพิมพ์พา ธ สัมบูรณ์ของไฟล์


นี่คือคำตอบที่ดีที่สุด เหตุใดจึงต้องใช้เครื่องมืออื่นเมื่อคำสั่ง SQL เดี่ยวทำ
sdgfsdh

คุณรู้วิธีที่จะทำให้งานนี้เมื่อคุณพยายามโหลดไฟล์ลงใน mysql ที่ทำงานบนเซิร์ฟเวอร์หรือไม่? มันขอให้ฉันเข้าถึงถูกปฏิเสธสำหรับไฟล์ (รหัสผ่าน) จะใส่รหัสผ่านของตำแหน่งที่ตั้งไฟล์ CSV ได้ที่ไหน
Baktaawar

7

บรรทัดคำสั่ง mysql มีแนวโน้มที่จะเกิดปัญหากับการนำเข้ามากเกินไป นี่คือวิธีที่คุณทำ:

  • ใช้ excel เพื่อแก้ไขชื่อส่วนหัวเพื่อไม่มีช่องว่าง
  • บันทึกเป็น. csv
  • ใช้เบราว์เซอร์ Navicat Lite Sql ฟรีเพื่อนำเข้าและสร้างตารางใหม่โดยอัตโนมัติ (ตั้งชื่อ)
  • เปิดตารางใหม่แทรกคอลัมน์หมายเลขอัตโนมัติหลักสำหรับ ID
  • เปลี่ยนประเภทของคอลัมน์ตามที่ต้องการ
  • ทำ!

5

หากคุณใช้ MySQL Workbench (เวอร์ชั่น 6.3 ปัจจุบัน) คุณสามารถทำได้โดย:

  1. คลิกขวาที่ "Tables"
  2. เลือกตัวช่วยสร้างการนำเข้าข้อมูลตาราง
  3. เลือกไฟล์ csv ของคุณและทำตามคำแนะนำ (สามารถใช้ JSON ด้วย); สิ่งที่ดีคือคุณสามารถสร้างตารางใหม่ตามไฟล์ csv ที่คุณต้องการนำเข้าหรือโหลดข้อมูลไปยังตารางที่มีอยู่

ป้อนคำอธิบายรูปภาพที่นี่


+1 ฉันใช้สิ่งนี้เพราะ mysql ยังคงให้ข้อผิดพลาดกับฉันLOAD DATA INFILEและmysqlimport("ไม่รองรับ mysql รุ่นนี้")
clmno

วิธีนี้ใช้งานได้ แต่มันช้า ฉันคิดว่าการใช้คุณสมบัตินี้จะสร้างคิวรีขนาดใหญ่INSERTและพยายามทำทั้งหมดในครั้งเดียว แต่ดูเหมือนว่าจะทำเช่นนี้ด้วยวิธีนี้จะทำงานครั้งเดียวINSERTต่อแถว
DaveTheMinion

4

ฉันเห็นบางสิ่งที่แปลก คุณกำลังใช้สำหรับ ESCAPING เป็นอักขระเดียวกับที่คุณใช้สำหรับ ENCLOSING ดังนั้นเครื่องยนต์ไม่ทราบว่าจะต้องทำอย่างไรเมื่อพบ '' 'และฉันคิดว่านั่นเป็นสาเหตุที่ดูเหมือนว่าไม่มีอะไรที่ถูกต้องฉันคิดว่าถ้าคุณลบบรรทัดของ ESCAPING ควรทำงานได้ดีเช่น:

LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

ยกเว้นว่าคุณวิเคราะห์ (ด้วยตนเอง, มองเห็น, ... ) CSV ของคุณและค้นหาตัวละครที่ใช้สำหรับการหลบหนี บางครั้งก็คือ '\' แต่ถ้าคุณไม่มีมันก็อย่าใช้มัน


3

อีกวิธีหนึ่งคือการใช้เครื่องมือcsvsqlจากชุดcsvkit ที่น่าตื่นตาตื่นใจ

ตัวอย่างการใช้งาน:

csvsql --db mysql://$user:$password@localhost/$database --insert --tables $tablename  $file

เครื่องมือนี้สามารถอนุมานชนิดข้อมูลโดยอัตโนมัติ (พฤติกรรมเริ่มต้น) สร้างตารางและแทรกข้อมูลลงในตารางที่สร้างขึ้น --overwriteสามารถใช้ตัวเลือกเพื่อวางตารางหากมีอยู่แล้ว --insertตัวเลือก - เพื่อเติมตารางจากไฟล์

เพื่อติดตั้งชุด

pip install csvkit

วิชาบังคับก่อน: python-dev , libmysqlclient-dev,MySQL-python

apt-get install python-dev libmysqlclient-dev
pip install MySQL-python

3

วิธีนำเข้าไฟล์ csv ไปยังตาราง sql

ไฟล์ตัวอย่าง: Overseas_trade_index data CSV file

ขั้นตอน:

  1. overseas_trade_indexจำเป็นต้องสร้างตาราง

  2. จำเป็นต้องสร้างคอลัมน์ที่เกี่ยวข้องกับไฟล์ csv

    แบบสอบถาม SQL:

    ( id int not null primary key auto_increment,
    series_reference varchar (60),
    period varchar (60),
    data_value decimal(60,0),
    status varchar (60),
    units varchar (60),
    magnitude int(60),
    subject text(60),
    group text(60),
    series_title_1 varchar (60),
    series_title_2 varchar (60),
    series_title_3 varchar (60),
    series_title_4 varchar (60),
    series_title_5 varchar (60),
     );
  3. จำเป็นต้องเชื่อมต่อฐานข้อมูล mysql ใน terminal

    =>show databases;
    =>use database;
    =>show tables;
  4. โปรดป้อนคำสั่งนี้เพื่อนำเข้าข้อมูล csv ไปยังตาราง mysql

    load data infile '/home/desktop/Documents/overseas.csv' into table trade_index fields terminated by ',' lines terminated by '\n' (series_reference,period,data_value,status,units,magnitude,subject,series_title1,series_title_2,series_title_3,series_title_4,series_title_5);
  5. ค้นหาข้อมูลดัชนีการค้าต่างประเทศในฐานข้อมูล sqld:

    select * from trade_index;

2

หากคุณกำลังใช้เครื่อง windows ที่โหลดสเปรดชีต Excel อยู่แล้วปลั๊กอิน mySql ใหม่ไปยัง Excel ถือเป็นปรากฏการณ์ ผู้ใช้ที่ Oracle ทำงานได้ดีมากกับซอฟต์แวร์ดังกล่าว คุณสามารถทำการเชื่อมต่อฐานข้อมูลโดยตรงจาก Excel ปลั๊กอินนั้นจะวิเคราะห์ข้อมูลของคุณและตั้งค่าตารางให้คุณในรูปแบบที่สอดคล้องกับข้อมูล ฉันมีไฟล์ข้อมูลขนาดใหญ่แปลงเป็น csv ขนาดใหญ่ เครื่องมือนี้ช่วยประหยัดเวลาได้มาก

http://dev.mysql.com/downloads/windows/excel/

คุณสามารถอัปเดตจากภายใน Excel ที่จะเติมลงในฐานข้อมูลออนไลน์ สิ่งนี้ทำงานได้ดีมากกับไฟล์ mySql ที่สร้างขึ้นบนโฮสติ้งที่ใช้ร่วมกันที่ราคาไม่แพงมากของ GoDaddy (หมายเหตุเมื่อคุณสร้างตารางที่ GoDaddy คุณต้องเลือกการตั้งค่าที่ไม่ได้มาตรฐานเพื่อเปิดใช้งานการเข้าถึงฐานข้อมูล ... )

ด้วยปลั๊กอินนี้คุณจะมีความสามารถในการโต้ตอบระหว่างสเปรดชีต XL และการจัดเก็บข้อมูล mySql ออนไลน์ของคุณ


2

ฉันใช้ mysql workbench เพื่อทำงานเดียวกัน

  1. สร้างสคีมาใหม่
  2. เปิดสคีมาที่สร้างขึ้นใหม่
  3. คลิกขวาที่ "Tables" และเลือก "Table Data Wizard Wizard"
  4. กำหนดพา ธ ไฟล์และชื่อไฟล์ csv และสุดท้ายกำหนดค่าประเภทคอลัมน์ของคุณเนื่องจากตัวช่วยสร้างตั้งค่าประเภทคอลัมน์เริ่มต้นตามค่าของพวกเขา

หมายเหตุ: ดูไฟล์บันทึกของ mysql workbench สำหรับข้อผิดพลาดโดยใช้ "tail -f [mysqlworkbenchpath] /log/wb*.log"


ขอบคุณมากสำหรับคำตอบของคุณ - ใหม่กับ MySQL ฉันไม่รู้เรื่องนี้ - มันช่วยฉันด้วย CSV ตอนนี้ฉันยังต้องนำเข้า 10 ตารางจาก Access - คุณคิดว่าวิธีที่ง่ายที่สุดในการส่งออกตารางเหล่านี้ไปยัง Excel จาก Excel เป็น CSV แล้วใช้ขั้นตอนเหล่านี้หรือไม่
นาโอมิ

ฉันพบว่าวิธีนี้ไม่ได้นำเข้าทุกแถว :( จาก 5,342 แถวมันนำเข้าเพียง 2,485 แถวสำหรับฉันทำไมถึงเป็นเช่นนั้น
Naomi

เฮ้ Naomi ถ้าคุณตรวจสอบบันทึก mysqlworkbench มันจะแสดงให้คุณเห็นว่าทำไมมันหยุดการนำเข้าข้อมูล คุณอาจมีค่า Null หรือชนิดไม่ตรงกันในไฟล์ DB และ CSV ของคุณ แต่ฉันขอแนะนำให้ทำตามคำตอบของฮวน ทางออกของเขาดีกว่าและสะอาดกว่าฉัน
เมห์

1

นี่คือตัวอย่างภาพหน้าจอของไฟล์ excel:

ป้อนคำอธิบายรูปภาพที่นี่

บันทึกเป็นและเลือก. csv

และคุณจะมีดังภาพด้านล่าง. csv data shot ถ้าคุณเปิดโดยใช้ notepad ++ หรือ notepad อื่น ๆ

ป้อนคำอธิบายรูปภาพที่นี่

ให้แน่ใจว่าคุณลบส่วนหัวและมีการจัดแนวคอลัมน์ใน. csv เช่นเดียวกับตาราง mysql แทนที่ folder_name ด้วยชื่อโฟลเดอร์ของคุณ

โหลดข้อมูลในท้องถิ่น
'D: /folder_name/myfilename.csv' ลงในฟิลด์เมล์ของตารางที่สิ้นสุดโดย ',' (ชื่อ, lname, อีเมล, โทรศัพท์);

หากข้อมูลขนาดใหญ่คุณสามารถดื่มกาแฟและโหลดมัน!

นั่นคือทั้งหมดที่คุณต้องการ



0

PHP Query สำหรับนำเข้าไฟล์ csv ไปยังฐานข้อมูล mysql

$query = <<<EOF
            LOAD DATA LOCAL INFILE '$file'
             INTO TABLE users
             FIELDS TERMINATED BY ','
             LINES TERMINATED BY '\n'
             IGNORE 1 LINES
            (name,mobile,email)
    EOF;
if (!$result = mysqli_query($this->db, $query))
   {
        exit(mysqli_error($this->db));
   }

** ตัวอย่างข้อมูลไฟล์ CSV **

name,mobile,email
Christopher Gritton,570-686-3439,ChristopherKGritton@inbound.plus
Brandon Wilson,541-309-5149,BrandonMWilson@inbound.plus
Craig White,516-795-8065,CraigJWhite@inbound.plus
David Whitney,713-214-3966,DavidCWhitney@inbound.plus

0

เปลี่ยนชื่อเซิร์ฟเวอร์ชื่อผู้ใช้รหัสผ่าน dbname พา ธ ของไฟล์ tablename และฟิลด์ที่อยู่ในฐานข้อมูลที่คุณต้องการแทรก

<?php
    $servername = "localhost";
    $username = "root";
    $password = "";
    $dbname = "bd_dashboard";
    //For create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    $query = "LOAD DATA LOCAL INFILE 
                'C:/Users/lenovo/Desktop/my_data.csv'
                INTO TABLE test_tab
                FIELDS TERMINATED BY ','
                LINES TERMINATED BY '\n'
                IGNORE 1 LINES
                (name,mob)";
    if (!$result = mysqli_query($conn, $query)){
        echo '<script>alert("Oops... Some Error occured.");</script>';
        exit();
            //exit(mysqli_error());
       }else{
        echo '<script>alert("Data Inserted Successfully.");</script>'
       }
    ?>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.