2008-10-24 67 views
72

Tôi đã làm việc với T-SQL trong MS SQL trong một thời gian bây giờ và bằng cách nào đó bất cứ khi nào tôi phải chèn dữ liệu vào một bảng tôi có xu hướng sử dụng cú pháp:INSERT vs INSERT INTO

INSERT INTO myTable <something here> 

Tôi hiểu từ khóa đó INTO là tùy chọn ở đây và tôi không phải sử dụng nó nhưng bằng cách nào đó nó đã trở thành thói quen trong trường hợp của tôi.

Câu hỏi của tôi là:

  • Có bất kỳ ý nghĩa của việc sử dụng cú pháp INSERT so INSERT INTO?
  • Trình duyệt nào tuân thủ đầy đủ tiêu chuẩn?
  • Cả hai có hợp lệ trong các triển khai SQL chuẩn khác không?

Trả lời

72

INSERT INTO là tiêu chuẩn. Mặc dù INTO là tùy chọn trong hầu hết các triển khai, nhưng nó được yêu cầu trong một số ít, vì vậy bạn nên bao gồm nó để đảm bảo rằng mã của bạn là di động.

Bạn có thể tìm thấy liên kết đến một số phiên bản của tiêu chuẩn SQL here. Tôi đã tìm thấy phiên bản HTML của tiêu chuẩn cũ hơn here.

+1

Cuốn sách "SQL-99 Toàn bộ, Thực sự" nói rằng Sybase (và do đó MS SQL Server) hoạt động theo cách không chuẩn, cho phép INTO là tùy chọn. Các nhãn hiệu cơ sở dữ liệu khác yêu cầu từ khóa. –

+2

Phải. Nếu bạn luôn luôn sử dụng INTO, bạn không cần phải nhớ những cái nào coi nó là tùy chọn. Tất cả các triển khai cho phép nó được sử dụng. –

1

Cả hai đều làm tương tự. INTO là tùy chọn (trong SQL Server của T-SQL) nhưng hỗ trợ khả năng đọc.

10

Nó có thể là tùy chọn trong mySQL, nhưng nó là bắt buộc trong một số DBMS khác, ví dụ như Oracle. Vì vậy, SQL sẽ có nhiều khả năng di động hơn với từ khóa INTO, cho những gì nó có giá trị.

18

Chúng giống nhau, INTO là hoàn toàn tùy chọn trong T-SQL (các phương ngữ SQL khác có thể khác nhau).

Trái ngược với các câu trả lời khác, tôi nghĩ rằng nó làm suy giảm khả năng đọc để sử dụng INTO.

Tôi nghĩ rằng đó là một điều thụ thai: Trong nhận thức của tôi, tôi không chèn một hàng vào một bảng có tên là "khách hàng", nhưng tôi chèn một khách hàng. (Điều này được kết nối với thực tế là tôi sử dụng để đặt tên cho các bảng của tôi ở dạng số ít, không số nhiều).

Nếu bạn làm theo khái niệm đầu tiên, INSERT INTO Customer rất có thể sẽ "cảm thấy đúng" cho bạn.

Nếu bạn tuân theo khái niệm thứ hai, rất có thể là INSERT Customer cho bạn.

+5

Tôi nghĩ rủi ro với cách tiếp cận của bạn là bạn có thể dẫn dắt các lập trình viên mới nhầm lẫn các đối tượng với các bảng. –

+11

Câu trả lời của bạn là chính xác. Đó là một sự xấu hổ khi mọi người xuống bỏ phiếu phản đối quan điểm. Tôi nghĩ rằng một trong những lợi ích của SO là nghe những ý kiến ​​khác nhau. – DOK

+0

Việc suy nghĩ trong các đồ vật và bàn là không quan trọng. Nó đang suy nghĩ theo cách thụ thai như một mô hình quan hệ thực thể. –

0

Tôi thích sử dụng nó hơn. Nó duy trì cảm giác phân định cú pháp giống nhau và khả năng đọc như các phần khác của ngôn ngữ SQL, như group BY, order BY.

4

Một bài học tôi dựa vào vấn đề này là bạn nên luôn luôn giữ cho nó nhất quán! Nếu bạn sử dụng INSERT INTO, cũng không sử dụng INSERT. Nếu bạn không làm điều đó, một số lập trình viên có thể hỏi cùng một câu hỏi một lần nữa. Đây là một ví dụ khác liên quan đến trường hợp của tôi: Tôi đã có cơ hội cập nhật một thủ tục lưu trữ rất dài trong MS SQL 2005. Vấn đề là quá nhiều dữ liệu được chèn vào một bảng kết quả. Tôi phải tìm ra dữ liệu đến từ đâu. Tôi đã cố gắng tìm ra nơi các hồ sơ mới được thêm vào. Ở phần đầu của SP, tôi thấy một số INSERT INTO.Sau đó, tôi đã cố gắng để tìm "INSERT INTO" và cập nhật chúng, nhưng tôi đã bỏ lỡ một nơi mà chỉ "INSERT" được sử dụng. Điều đó thực sự đã chèn 4k + hàng dữ liệu trống vào một số cột! Tất nhiên, tôi chỉ nên tìm INSERT. Tuy nhiên, điều đó đã xảy ra với tôi. Tôi đổ lỗi cho lập trình viên IDIOT trước đây :) :)

+0

Có vẻ như tác giả đã tạo ra nó với INSERT INTO và một số đã đặt INSERT trong một bảo trì. Nó xảy ra rất nhiều, nhiều hơn nó "nên", thật không may. –

0

Nếu có sẵn, hãy sử dụng chức năng tiêu chuẩn. Không phải là bạn đã từng cần tính di động cho cơ sở dữ liệu cụ thể của bạn, nhưng rất có thể là bạn cần tính di động cho kiến ​​thức SQL của bạn. Một ví dụ T-SQL khó chịu cụ thể là việc sử dụng isnull, sử dụng coalesce!

3

Trong SQL Server 2005, bạn có thể có một cái gì đó ở giữa INSERT và VÀO như thế này:

 
INSERT top(5) INTO tTable1 SELECT * FROM tTable2; 

Mặc dù nó hoạt động mà không có sự VÀO, tôi thích sử dụng VÀO cho dễ đọc.

0

Tôi bắt đầu wtiting SQL trên ORACLE, vì vậy khi tôi nhìn thấy mã mà không có INTO nó chỉ trông 'bị hỏng' và khó hiểu.

Vâng, đó chỉ là ý kiến ​​của tôi và tôi không nói rằng bạn nên luôn sử dụng INTO. Nhưng bạn không nên biết rằng nhiều người khác có thể sẽ nghĩ cùng một điều, đặc biệt nếu họ chưa bắt đầu viết kịch bản với các triển khai mới hơn.

Với SQL tôi nghĩ rằng cũng rất quan trọng để nhận ra rằng bạn đang thêm ROW vào TABLE và không hoạt động với các đối tượng. Tôi nghĩ rằng nó sẽ là vô ích với một nhà phát triển mới để suy nghĩ về các hàng trong bảng SQL/các mục như là các đối tượng. Một lần nữa, chỉ cho tôi ý kiến.

Các vấn đề liên quan