Hướng dẫn nhập tệp CSV vào MySQL chi tiết cho người mới bắt đầu

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

Nhập tệp CSV vào MySQL là một cách mạnh mẽ để tối ưu hóa việc quản lý dữ liệu và loại bỏ công việc nhập thủ công. Ví dụ, khi bạn muốn đưa dữ liệu từ nhiều nguồn khác nhau vào cơ sở dữ liệu chỉ trong một bước, hoặc cần tự động xử lý dữ liệu từ hệ thống bên ngoài, thì nhập CSV là giải pháp rất hữu ích.

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

  • Xử lý dữ liệu lớn: Thay vì nhập thủ công hàng nghìn bản ghi, bạn có thể dùng nhập CSV để xử lý nhanh chóng chỉ trong vài phút.
  • Di chuyển dữ liệu: Rất tiện lợi khi bạn muốn đưa dữ liệu đã xuất từ hệ thống khác vào MySQL.
  • Cập nhật dữ liệu định kỳ: Trong các hệ thống cần cập nhật thường xuyên, việc tự động hóa bằng tệp CSV sẽ giúp tiết kiệm thời gian.

2. Điều kiện tiên quyết

Trước khi nhập tệp CSV vào MySQL, bạn cần thực hiện một số cài đặt và chuẩn bị để đảm bảo quá trình diễn ra suôn sẻ.

2.1 Môi trường cần thiết

  • Cài đặt máy chủ MySQL
    Yêu cầu MySQL đã được cài đặt chính xác. Hãy kiểm tra để đảm bảo MySQL hoạt động trên hệ điều hành bạn đang dùng như Windows, macOS hoặc Linux.
  • Quyền truy cập cần thiết
    Để nhập CSV, người dùng MySQL cần được cấp quyền phù hợp, đặc biệt là quyền LOAD DATA INFILE. Nếu không có quyền này, quá trình nhập sẽ bị từ chối.

2.2 Định dạng tệp CSV

  • Ký tự phân tách
    Thông thường CSV được phân tách bằng dấu phẩy, nhưng đôi khi có thể dùng tab hoặc dấu chấm phẩy. Hãy kiểm tra ký tự phân tách trước khi nhập.
  • Kiểm tra mã hóa
    Nếu tệp CSV được lưu bằng mã hóa khác (UTF-8, Shift-JIS, v.v.), có thể gây lỗi hiển thị khi nhập. Hãy đảm bảo tệp được mã hóa đúng, và chuyển đổi sang UTF-8 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 đưa lượng lớn dữ liệu vào cơ sở dữ liệu một cách nhanh chóng.

3.1 Cú pháp cơ bản

Dưới đây là cú pháp cơ bản khi nhậ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 ký tự phân tách các trường, thường là dấu phẩy.
  • LINES TERMINATED BY: Xác định ký tự kết thúc dòng, thường là n (xuống dòng).

3.2 Ví dụ thực tế

Ví dụ sau nhập tệp 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 dòng đầu tiên (tiêu đề cột) trong tệp CSV. Tùy chọn này rất hữu ích khi dòng đầu chứa tên cột.

3.3 Lưu ý: đường dẫn tệp và quyền

Khi chỉ định đường dẫn tệp, hãy đảm bảo máy chủ MySQL có quyền truy cập. Nếu không, hãy dùng LOAD DATA LOCAL INFILE để nhập dữ liệu từ phía client.

4. Giải quyết sự cố thường gặp

Dưới đây là các vấn đề phổ biến khi nhập CSV và cách xử lý.

4.1 Lỗi đường dẫn tệp

Nếu đường dẫn không đúng, bạn có thể thấy lỗi The MySQL server is not permitted to read from the file. Khi đó, hãy kiểm tra lại đường dẫn hoặc dùng tùy chọn LOAD DATA LOCAL INFILE để nhập từ máy cục bộ.

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

4.2 Lỗi mã hóa ký tự

Nếu tệp CSV có mã hóa khác, dữ liệu có thể bị lỗi hiển thị khi nhập. Để tránh, hãy xác nhận mã hóa và thiết lập đúng trên MySQL.

SET NAMES 'utf8mb4';

 

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

Dưới đây là hướng dẫn chi tiết để nhập một tệp CSV vào MySQL.

5.1 Chuẩn bị tệp CSV

Tạo tệp CSV (data.csv) với nội dung như sau:

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

5.2 Thực thi lệnh

Để nhập tệp vào bảng users, chạy lệnh sau:

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

Lệnh này sẽ nhập dữ liệu từ dòng thứ 2 của tệp CSV vào bảng users.

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

Dưới đây là cách xử lý khi gặp lỗi hoặc dữ liệu trùng trong quá trình nhập.

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

Nếu dữ liệu có cùng khóa đã tồn tại, bạn có thể dùng tùy chọn REPLACE để thay thế bản ghi cũ bằng dữ liệu mới.

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 nhập

Nếu có lỗi khi nhập nhưng muốn tiếp tục xử lý các dòng khác, hãy dùng tùy chọn IGNORE để bỏ qua dòng bị lỗi.

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

Nhập CSV vào MySQL là một công cụ mạnh mẽ giúp xử lý dữ liệu lớn và di chuyển dữ liệu giữa các hệ thống. Hiểu rõ các bước cơ bản, kết hợp xử lý lỗi và tránh dữ liệu trùng lặp sẽ giúp bạn quản lý dữ liệu ổn định hơn.

Trong các bài viết tiếp theo, chúng tôi sẽ hướng dẫn chi tiết cách xuất dữ liệu từ MySQL để nâng cao hơn nữa kỹ năng quản lý dữ liệu của bạn.