Cách nhập tệp CSV vào MySQL: Hướng dẫn đầy đủ với LOAD DATA INFILE và khắc phục sự cố

1. Giới thiệu về việc nhập tệp CSV vào MySQL

Việc nhập tệp CSV vào MySQL là một cách mạnh mẽ để tối ưu hoá quản lý dữ liệu và loại bỏ nhu cầu nhập liệu thủ công. Ví dụ, khi bạn cần nhập hàng loạt thông tin thu thập từ nhiều nguồn dữ liệu vào cơ sở dữ liệu, hoặc tự động xử lý dữ liệu từ các hệ thống bên ngoài, việc nhập CSV trở nên vô cùng hữu ích.

Các trường hợp sử dụng phổ biến cho việc nhập CSV

  • Xử lý khối lượng dữ liệu lớn : Thay vì nhập thủ công hàng ngàn bản ghi, bạn có thể xử lý chúng nhanh chóng bằng cách nhập CSV.
  • Di chuyển dữ liệu : Tiện lợi khi nhập dữ liệu đã xuất từ các hệ thống khác vào MySQL.
  • Cập nhật dữ liệu định kỳ : Các hệ thống cần cập nhật dữ liệu định kỳ có thể tự động hoá quy trình bằng các tệp CSV.

2. Các yêu cầu trước

Trước khi nhập tệp CSV vào MySQL, cần thực hiện một số cài đặt và chuẩn bị. Những việc này đảm bảo quy trình nhập dữ liệu diễn ra suôn sẻ và không lỗi.

2.1 Môi trường yêu cầu

  • Cài đặt MySQL Server Giả sử MySQL đã được cài đặt đúng cách. Đảm bảo MySQL đang chạy bình thường trong môi trường của bạn, bất kể là Windows, macOS hay Linux.
  • Xác minh quyền cần thiết Để nhập tệp CSV, người dùng MySQL phải có các quyền thích hợp. Đặc biệt, cần có quyền thực thi LOAD DATA INFILE. Nếu không có quyền này, việc nhập có thể bị từ chối.

2.2 Định dạng tệp CSV

  • Dấu phân cách Các tệp CSV thường được ngăn cách bằng dấu phẩy, nhưng trong một số trường hợp có thể dùng tab hoặc dấu chấm phẩy. Kiểm tra trước dấu phân cách đang được sử dụng.
  • Kiểm tra mã hoá Nếu tệp CSV được lưu với mã hoá ký tự khác (như UTF-8 hoặc Shift-JIS), có thể xảy ra hiện tượng hỏng ký tự khi nhập. Xác minh mã hoá của tệp trước và chuyển đổi nếu cần.

3. Nhập CSV bằng lệnh LOAD DATA INFILE

Cách phổ biến nhất để nhập tệp CSV vào MySQL là sử dụng lệnh LOAD DATA INFILE. Lệnh này cho phép bạn dễ dàng tải một lượng lớn dữ liệu vào cơ sở dữ liệu.

3.1 Cú pháp cơ bản

Dưới đây là cú pháp cơ bản được sử dụng để nhập tệp CSV vào MySQL.

LOAD DATA INFILE '/path/to/file.csv' INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
  • FIELDS TERMINATED BY : Xác định dấu phân cách trường. Thông thường là dấu phẩy.
  • LINES TERMINATED BY : Xác định dấu phân cách dòng. Thông thường sử dụng \n (dòng mới).

3.2 Ví dụ thực thi

Ví dụ dưới đây nhập tệp có tên user_data.csv vào bảng users.

LOAD DATA INFILE '/path/to/user_data.csv' INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
  • IGNORE 1 LINES : Bỏ qua hàng đầu tiên (hàng tiêu đề) của tệp CSV. Tùy chọn này hữu ích khi tên cột được bao gồm trong dòng đầu.

3.3 Lưu ý quan trọng: Đường dẫn tệp và quyền truy cập

Khi chỉ định đường dẫn tệp, tệp phải nằm trong thư mục mà máy chủ MySQL có thể truy cập. Nếu máy chủ không thể truy cập tệp, hãy sử dụng LOAD DATA LOCAL INFILE để tải dữ liệu từ phía máy khách.

4. Giải pháp cho các vấn đề thường gặp

Dưới đây là các giải pháp cho những vấn đề thường gặp khi nhập tệp CSV.

4.1 Vấn đề về đường dẫn tệp

Nếu đường dẫn tệp không được chỉ định đúng, bạn có thể nhận được thông báo lỗi như The MySQL server is not permitted to read from the file. Trong trường hợp này, hãy xác minh rằng đường dẫn tệp phía máy chủ là chính xác. Bạn cũng có thể sử dụng tùy chọn LOAD DATA LOCAL INFILE để tải tệp cục bộ.

LOAD DATA LOCAL INFILE '/path/to/file.csv' INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

4.2 Vấn đề mã hoá ký tự

Nếu tệp được lưu với mã hoá ký tự khác, có thể xảy ra hiện tượng hỏng ký tự khi nhập. Để tránh vấn đề này, hãy kiểm tra mã hoá của tệp trước và chỉ định bộ ký tự phù hợp trong MySQL.

SET NAMES 'utf8mb4';

5. Ví dụ thực tế: Quy trình nhập CSV

Here, we explain the step-by-step procedure for importing an actual CSV file into MySQL.

5.1 Chuẩn bị tệp CSV

Create a CSV file (data.csv) with the following content.

id,name,age
1,Taro Yamada,28
2,Hanako Sato,34
3,Ichiro Tanaka,45

5.2 Thực thi lệnh

Run the following command to import the created CSV file into the users table.

LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES;

This command imports data starting from the second row of the CSV file into the users table.

6. Nâng cao: Xử lý lỗi và Ngăn ngừa dữ liệu trùng lặp

This section explains how to handle errors during CSV import and how to deal with duplicate data.

6.1 Xử lý dữ liệu trùng lặp

If data with the same key already exists, you can use the REPLACE option to overwrite duplicate rows with new data.

LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
REPLACE;

6.2 Xử lý lỗi

If errors occur during import but you want to continue processing, use the IGNORE option. This skips problematic rows and imports the remaining valid data.

LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
IGNORE;

7. Kết luận

Importing CSV files into MySQL is a powerful tool for efficiently handling large datasets and migrating data between systems. By understanding the basic procedures and implementing proper error handling and duplicate prevention strategies, you can achieve stable and reliable data imports.

In future articles, we will also explain how to export data from a MySQL database in detail. Continue improving your data management skills.