Câu trả lời:
Theo như tôi có thể nói, cả hai cú pháp đều tương đương nhau. Đầu tiên là tiêu chuẩn SQL, thứ hai là phần mở rộng của MySQL.
Vì vậy, họ nên được chính xác hiệu suất tương đương khôn ngoan.
http://dev.mysql.com/doc/refman/5.6/en/insert.html nói:
INSERT chèn các hàng mới vào một bảng hiện có. Các dạng INSERT ... VALUES và INSERT ... SET của câu lệnh chèn các hàng dựa trên các giá trị được chỉ định rõ ràng. Biểu mẫu CHỌN ... CHỌN chèn các hàng được chọn từ một bảng hoặc bảng khác.
INSERT INTO table SET
? Điều này thậm chí có thể?
Tôi nghĩ rằng tiện ích mở rộng nhằm mục đích cho phép một cú pháp tương tự để chèn và cập nhật. Trong Oracle, một thủ thuật cú pháp tương tự là:
UPDATE table SET (col1, col2) = (SELECT val1, val2 FROM dual)
INSERT ... SET ...
và INSERT ... VALUES ...
. Đối với tính năng bạn có mã ngắn hơn, viết nhanh hơn, tăng khả năng đọc và loại bỏ lỗi chính tả gây ra bằng cách trộn thứ tự cột khi viết VALUES
mệnh đề của bạn . Ruột của tôi nói với tôi rằng trên mạng cái tốt hơn cái xấu, nhưng phán đoán của bạn có thể khác.
Vì các cú pháp là tương đương (dù sao trong MySQL), tôi thích INSERT INTO table SET x=1, y=2
cú pháp hơn, vì nó dễ sửa đổi hơn và dễ bắt lỗi hơn trong câu lệnh, đặc biệt là khi chèn nhiều cột. Nếu bạn phải chèn 10 hoặc 15 cột trở lên, theo tôi, thật dễ dàng để trộn một cái gì đó bằng cách sử dụng (x, y) VALUES (1,2)
cú pháp.
Nếu tính di động giữa các tiêu chuẩn SQL khác nhau là một vấn đề, thì có lẽ INSERT INTO table (x, y) VALUES (1,2)
sẽ được ưu tiên.
Và nếu bạn muốn chèn nhiều bản ghi vào một truy vấn, có vẻ như INSERT INTO ... SET
cú pháp sẽ không hoạt động, trong khi đó một cú pháp khác sẽ làm. Nhưng trong hầu hết các trường hợp thực tế, bạn đang lặp qua một tập hợp các bản ghi để thực hiện chèn bất kỳ cách nào, mặc dù có thể có một số trường hợp có thể xây dựng một truy vấn lớn để chèn một loạt các hàng vào một bảng trong một truy vấn, so với truy vấn cho mỗi hàng, có thể có một cải tiến hiệu suất. Thực sự không biết.
INSERT INTO table SET
không phải là tiêu chuẩn. Có vẻ rõ ràng hơn nhiều. Tôi đoánINSERT INTO table ([column name, column name b]) VALUES (['value a', 'value b'])
dù sao tôi cũng sẽ phải sử dụng cú pháp để tự cứu mình khỏi rắc rối nếu tôi chuyển sang Postgres.