Bạn có thể sử dụng câu lệnh nào để tải dữ liệu từ tệp vào bảng mysql?

Bài viết này sẽ chứng minh sự khác biệt giữa LOAD DATA INFILE và INSERT và giải thích khi nào bạn nên sử dụng cả hai để nhập dữ liệu trong MySQL

một năm trước   •   5 phút đọc

Bạn có thể sử dụng câu lệnh nào để tải dữ liệu từ tệp vào bảng mysql?
Bởi Lukas Vileikis

Mục lục

Giới thiệu

Nếu bạn đã làm việc với MySQL một thời gian, có thể bạn đã biết rằng MySQL cung cấp nhiều phương thức để nhập dữ liệu. Một trong số đó – câu lệnh

INSERT INTO arctype VALUES ('Demo', Demo 2');
3 – có thể được coi là một cách tiêu chuẩn để làm như vậy. Tuy nhiên, MySQL cũng có một cách khác để nhập các kết xuất –
INSERT INTO arctype VALUES ('Demo', Demo 2');
4. Một tuyên bố như vậy có thể hữu ích nếu chúng ta thấy mình đang làm việc với nhiều dữ liệu bên trong các phiên bản cơ sở dữ liệu của mình. Tuy nhiên, khi đứng trước hai lựa chọn đó, có lẽ chúng ta không chắc cái nào tốt hơn – đó là điều chúng ta đang tìm hiểu ngày nay

CHÈN dữ liệu

Để bắt đầu, câu lệnh

INSERT INTO arctype VALUES ('Demo', Demo 2');
0, như tên gọi của nó, cho phép chúng ta chèn dữ liệu vào một bảng. Ở dạng cơ bản nhất, câu lệnh trông giống như vậy

INSERT INTO arctype VALUES ('Demo', Demo 2');
1

Như bạn có thể thấy, tuyên bố bao gồm một vài phần

  1. Câu lệnh
    INSERT INTO arctype VALUES ('Demo', Demo 2');
    3 cho MySQL biết chúng ta muốn
    INSERT INTO arctype VALUES ('Demo', Demo 2');
    0 dữ liệu thay vì
    INSERT INTO arctype VALUES ('Demo', Demo 2');
    4ing, xóa hoặc cập nhật nó
  2. INSERT INTO arctype VALUES ('Demo', Demo 2');
    5 là tên của bảng mà chúng tôi muốn chèn dữ liệu vào
  3. INSERT INTO arctype VALUES ('Demo', Demo 2');
    6 đề cập đến tên cột của cột mà chúng tôi muốn chèn dữ liệu
  4. INSERT INTO arctype VALUES ('Demo', Demo 2');
    7 chỉ định rằng các giá trị sẽ được đặt sau tham số này
  5. INSERT INTO arctype VALUES ('Demo', Demo 2');
    8 chèn một hàng có văn bản
    INSERT INTO arctype VALUES ('Demo', Demo 2');
    8 bên trong một cột
    INSERT INTO arctype VALUES ('Demo', Demo 2');
    6

CHÈN các ví dụ

Sau khi chúng tôi chạy một câu lệnh SQL như vậy, một số dữ liệu demo sẽ được thêm vào bảng của chúng tôi. Chúng tôi cũng có thể chạy các câu lệnh

INSERT INTO arctype VALUES ('Demo', Demo 2');
0 như vậy

INSERT INTO arctype VALUES ('Demo', Demo 2');
1

Trong trường hợp này, giá trị của

INSERT INTO arctype VALUES ('Demo', Demo 2');
22 sẽ được chèn vào cột có tên là
INSERT INTO arctype VALUES ('Demo', Demo 2');
23 và giá trị của
INSERT INTO arctype VALUES ('Demo', Demo 2');
24 sẽ được chèn vào
INSERT INTO arctype VALUES ('Demo', Demo 2');
25

Ngoài ra, hãy nhớ rằng khi thêm giá trị cho mỗi cột trong bảng, chúng ta không cần chỉ định cột

INSERT INTO arctype VALUES ('Demo', Demo 2');

Nó sẽ hoạt động giống như một ví dụ trước đó

Ngoài ra, chúng tôi có thể sử dụng cách chèn nhiều hàng cùng một lúc, một truy vấn như vậy

INSERT INTO arctype VALUES ('Demo', Demo 2');
2

Nó cũng sẽ thực hiện hoàn hảo. Ưu điểm của điều này là chúng tôi cũng giảm các cuộc gọi đến chính cơ sở dữ liệu

Khi INSERT không hoạt động

Tuy nhiên, truy vấn

INSERT INTO arctype VALUES ('Demo', Demo 2');
0 cũng đi kèm với một số cảnh báo. dữ liệu chèn vào bảng phải phù hợp với kiểu dữ liệu của cột được đặt trong bảng. Điều đó có nghĩa là nếu, ví dụ, chúng ta sẽ chạy một truy vấn như vậy

INSERT INTO arctype VALUES ('Demo', Demo 2');
9

Trường hợp

INSERT INTO arctype VALUES ('Demo', Demo 2');
27 thuộc loại
INSERT INTO arctype VALUES ('Demo', Demo 2');
28, MySQL sẽ không thực hiện truy vấn và thay vào đó sẽ trả về lỗi như vậy

INSERT INTO arctype VALUES ('Demo', Demo 2');
29

Lỗi này khá dễ hiểu. cột

INSERT INTO arctype VALUES ('Demo', Demo 2');
27 chấp nhận số chứ không phải giá trị văn bản. chúng tôi đã cho nó ăn thứ khác và MySQL không thích nó

Nhập một lượng lớn dữ liệu

Việc chèn dữ liệu vào các phiên bản MySQL của bạn sẽ giúp bạn đi khá xa. Tuy nhiên, tại một số thời điểm trong sự nghiệp của bạn với tư cách là một DBA MySQL, bạn có thể cần xem xét các câu lệnh

INSERT INTO arctype VALUES ('Demo', Demo 2');
0 và nhập một lượng dữ liệu khá lớn (dữ liệu bao gồm 100.000 hàng trở lên) vào các phiên bản cơ sở dữ liệu của bạn. Một vài dự án dựa trên dữ liệu lớn có thể sử dụng tính năng này (ví dụ: bạn có biết rằng một trong những công cụ tìm kiếm vi phạm dữ liệu quan trọng nhất trên thế giới được xây dựng trên MySQL không?). Tuy nhiên, để hiểu đầy đủ về nó, chúng ta phải nhận ra các lựa chọn của mình

Sử dụng LOAD DATA INFILE

Để nhập một lượng lớn dữ liệu vào MySQL, chúng ta có thể sử dụng kỹ thuật chèn nhiều hàng (đã nêu ở trên) hoặc sử dụng

INSERT INTO arctype VALUES ('Demo', Demo 2');
4 thay thế. Như tên cho thấy,
INSERT INTO arctype VALUES ('Demo', Demo 2');
4 tải dữ liệu vào một bảng từ một tệp. Cú pháp cơ bản của truy vấn
INSERT INTO arctype VALUES ('Demo', Demo 2');
4 trông giống như vậy

INSERT INTO arctype VALUES ('Demo', Demo 2');
5

Trong đó

INSERT INTO arctype VALUES ('Demo', Demo 2');
95 mô tả đường dẫn đến tệp mà chúng tôi muốn tải dữ liệu từ đó và
INSERT INTO arctype VALUES ('Demo', Demo 2');
5 đại diện cho tên của bảng

INSERT INTO arctype VALUES ('Demo', Demo 2');
4 cũng có các tùy chọn khác có thể được chỉ định. Ví dụ: chúng ta cũng có thể chỉ định các cột mà chúng ta muốn tải dữ liệu vào ở cuối câu lệnh

INSERT INTO arctype VALUES ('Demo', Demo 2');
8

BỎ QUA là gì?

Một câu lệnh như trên sẽ chỉ chèn dữ liệu vào một cột có tên là

INSERT INTO arctype VALUES ('Demo', Demo 2');
98. Chúng tôi cũng có thể chỉ định một từ khóa
INSERT INTO arctype VALUES ('Demo', Demo 2');
99 nếu chúng tôi mong muốn

INSERT INTO arctype VALUES ('Demo', Demo 2');
1

Câu lệnh này sẽ giải quyết bất kỳ lỗi nào mà nó gặp phải và tải dữ liệu bất kể. Câu lệnh

INSERT INTO arctype VALUES ('Demo', Demo 2');
99 cũng có thể được sử dụng kết hợp với các cột cụ thể

INSERT INTO arctype VALUES ('Demo', Demo 2');
4

Tuyên bố này rất mạnh mẽ vì một lý do đơn giản. nếu tập dữ liệu đã cho của chúng tôi rất lớn và chúng tôi thậm chí không cần một nửa thông tin trong đó (giả sử, chúng tôi chỉ cần các giá trị của cột đầu tiên chứ không cần giá trị của cột thứ hai, thứ ba, v.v. ), câu lệnh này sẽ thuận tiện "quên" tải dữ liệu vào các cột đó và bỏ qua mọi lỗi mà MySQL có thể gặp phải trên đường đi. Nói về tiết kiệm thời gian

Ngoài ra, hãy nhớ rằng

INSERT INTO arctype VALUES ('Demo', Demo 2');
4 cũng có thể là
INSERT INTO arctype VALUES ('Demo', Demo 2');
53 nghĩa là bạn cũng có thể nhanh chóng thực hiện một truy vấn như
INSERT INTO arctype VALUES ('Demo', Demo 2');
54. điều đó cũng sẽ hiệu quả. Câu lệnh
INSERT INTO arctype VALUES ('Demo', Demo 2');
53 thay đổi vị trí mà MySQL có thể mong đợi dữ liệu. nếu câu lệnh
INSERT INTO arctype VALUES ('Demo', Demo 2');
53 đang được sử dụng, MySQL sẽ mong đợi dữ liệu được đặt ở đâu đó trên máy khách;

Tại sao LOAD DATA INFILE quá nhanh?

Khi làm việc với MySQL và so sánh thời gian nhập giữa các câu lệnh

INSERT INTO arctype VALUES ('Demo', Demo 2');
3 và
INSERT INTO arctype VALUES ('Demo', Demo 2');
4 trong MySQL, bạn có thể nhận thấy rằng câu lệnh
INSERT INTO arctype VALUES ('Demo', Demo 2');
4 tải dữ liệu vào cơ sở dữ liệu nhanh hơn rất nhiều so với
INSERT INTO arctype VALUES ('Demo', Demo 2');
0. Lý do tại sao khá đơn giản.
INSERT INTO arctype VALUES ('Demo', Demo 2');
4 làm phiền MySQL ít hơn
INSERT INTO arctype VALUES ('Demo', Demo 2');
0 câu lệnh. ví dụ: câu lệnh
INSERT INTO arctype VALUES ('Demo', Demo 2');
4 có thể bỏ qua các dòng, cột hoặc nếu chúng ta muốn, chỉ tải dữ liệu vào các cột cụ thể, bỏ qua tất cả các cột khác (tham khảo ví dụ trên. ) Câu lệnh
INSERT INTO arctype VALUES ('Demo', Demo 2');
0 không cung cấp các tính năng như vậy; . Tuy nhiên, điều đó không có nghĩa là
INSERT INTO arctype VALUES ('Demo', Demo 2');
4 không có khuyết điểm; . để tránh điều đó, bạn có thể muốn chia nhỏ các tệp bạn sử dụng để tải dữ liệu vào cơ sở dữ liệu và thay vì tải dữ liệu với 100 hoặc 200 triệu hàng cùng một lúc, hãy tải dữ liệu đó thành các phần nhỏ hơn. ví dụ: có mười tệp với 10 triệu hàng mỗi tệp, lấy các câu lệnh
INSERT INTO arctype VALUES ('Demo', Demo 2');
4 của bạn từ một vòng lặp và chạy từng tệp một. Bạn đã hoàn tất

Sửa đổi dữ liệu với Arctype

Nếu bạn thường thấy mình đang

INSERT INTO arctype VALUES ('Demo', Demo 2');
0 dữ liệu vào MySQL, rất có thể bạn đang sử dụng một trình soạn thảo. Trình soạn thảo SQL như Arctype sẽ cho phép bạn tạo và chỉnh sửa bảng một cách dễ dàng. Nó cũng sẽ cho phép bạn chia sẻ các truy vấn với nhóm của mình – tất cả đều có hiệu suất cực nhanh. Nếu bạn cần một trình soạn thảo SQL, hãy dùng thử Arctype. Ví dụ: đây là quy trình chỉnh sửa bảng có thể trông như thế nào khi sử dụng Arctype

Bạn có thể sử dụng câu lệnh nào để tải dữ liệu từ tệp vào bảng mysql?
Chỉnh sửa bảng với Arctype

Và đó thậm chí không phải là nó. Nếu bạn muốn, bạn cũng có thể chỉnh sửa các ràng buộc hoặc khóa ngoại. tất cả mà không phải lo lắng về việc chạy các truy vấn sửa đổi chúng cho bạn

Bạn có thể sử dụng câu lệnh nào để tải dữ liệu từ tệp vào bảng mysql?
Sửa đổi các ràng buộc với Arctype

Nếu bạn thấy mình là người thường xuyên đọc blog Arctype, có lẽ bạn đã nhận thấy rằng blog này đề cập đến rất nhiều chủ đề khác nhau, từ các giao dịch trong PostgreSQL đến việc tạo ra dữ liệu lớn với MySQL. Nếu bạn thích các chủ đề này, hãy nhớ theo dõi một lúc. chúng tôi có nhiều thứ khác sắp tới

Câu lệnh nào có thể sử dụng để tải dữ liệu từ tệp vào bảng?

Câu lệnh LOAD DATA đọc các hàng từ tệp văn bản vào bảng với tốc độ rất cao. Tệp có thể được đọc từ máy chủ lưu trữ hoặc máy khách lưu trữ, tùy thuộc vào việc công cụ sửa đổi ĐỊA PHƯƠNG có được cung cấp hay không.

Bạn có thể sử dụng câu lệnh nào để tải dữ liệu từ tệp vào bảng trong phần tiếp theo của tôi?

Sử dụng câu lệnh LOAD DATA, bạn có thể chèn nội dung của tệp (từ máy chủ hoặc máy chủ lưu trữ) vào bảng MySQL. Nếu bạn sử dụng mệnh đề ĐỊA PHƯƠNG, bạn có thể tải nội dung tệp cục bộ int lên một bảng