Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tốt nhất để so sánh / chèn / cập nhật các sản phẩm trong db MySQL từ tệp .CSV là gì

Chúng tôi đã có một tình huống tương tự. Sau rất nhiều nỗ lực để làm cho tập lệnh tốt hơn, chúng tôi quyết định rằng chúng tôi cần một cách tiếp cận khác để việc nhập của chúng tôi hoạt động hiệu quả và không mất ~ 10 giờ.

Những gì chúng tôi đã làm là kết xuất tất cả mã PHP và thay vào đó sử dụng mysqlimport để tải trực tiếp nội dung của tệp CSV vào một bảng. Bảng đó hiện chứa mọi thứ chúng ta cần, nhưng không phải ở dạng hữu ích cho chúng ta (không có cấu trúc, một số trường cần xử lý, v.v.)

Tuy nhiên, vì mọi thứ hiện đã có trong cơ sở dữ liệu nên chúng ta có thể làm mọi thứ chúng ta muốn với một truy vấn. Ví dụ:xóa tất cả dữ liệu không còn trong tệp nhập, đó chỉ là DELETE FROM structured_table AS st LEFT JOIN unstructured_table AS ut ON st.someField = ut.someField WHERE ut.someField IS NULL; , việc cập nhật các bản ghi hiện có chỉ là UPDATE structured_table AS st INNER JOIN unstructured_table AS ut ON st.someField = ut.someField SET st.anotherField = CONCAT(ut.aField, ' ', ut.yetAnotherField); .

Rõ ràng, đối với một tập lệnh nhập phức tạp, các truy vấn của bạn sẽ phức tạp hơn và bạn sẽ cần thêm chúng. Bạn thậm chí có thể cần phải ném một số thủ tục được lưu trữ vào để thực hiện xử lý trên các trường riêng lẻ. Nhưng nếu bạn có thể thực hiện kiểu tiếp cận này, bạn sẽ kết thúc với một quy trình có thể xử lý nhiều dữ liệu và rất có thể mở rộng.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chức năng cắt ngắn tương thích UTF-8

  2. Không tìm thấy './mysql/user.MYD' (Mã lỗi:2 - Không có tệp hoặc thư mục như vậy)

  3. Cú pháp 'LIKE' trong SQL

  4. Tại sao không đơn giản nếu Câu lệnh ELSE hoạt động trong mySql

  5. Tải lên tệp CSV lớn vào cơ sở dữ liệu Mysql