2009-11-09 50 views
5

Khi suy ngẫm this question về câu lệnh SQL INSERT, tôi nhận thấy rằng sự khác biệt về cú pháp giữa hai câu lệnh này phần lớn là nhân tạo. Đó là, tại sao chúng ta không thể làm:Tại sao các câu lệnh SQL INSERT và UPDATE có các Cú pháp khác nhau?

INSERT INTO MyTable SET Field1=Value1, Field2=Value2, ... 

hoặc

UPDATE MyTable (Field1, Field2 ...) VALUES (Value1, Value2, ...) 
    WHERE some-key = some-value 

Có lẽ tôi là thiếu một cái gì đó quan trọng. Nhưng đối với những người trong chúng ta, những người đã phải ghép nối các câu lệnh SQL của chúng tôi trong quá khứ, có cú pháp tương đương với một số INSERT và một tuyên bố UPDATE sẽ tiết kiệm được một lượng đáng kể mã hóa.

+0

Không thực sự là một câu hỏi = P – ajdams

+0

Xin lỗi, nhưng đây là một câu hỏi kiểu thảo luận và không thực sự phù hợp với mục đích của trang web. – jkndrkn

+0

@ajdams - Tôi đã không chắc chắn, nhưng tôi đã chắc chắn rằng nếu nó có thể được hỏi ở tất cả, nó phải là một phần của Wiki –

Trả lời

6

Chúng đang phân phối các chức năng ngữ pháp khác nhau. Trong bản cập nhật, bạn chỉ định một bộ lọc chọn một tập hợp các hàng mà bạn sẽ áp dụng bản cập nhật. Và tất nhiên cú pháp đó được chia sẻ với một truy vấn SELECT cho cùng một mục đích.

Trong INSERT bạn không chọn bất kỳ hàng nào, bạn đang tạo một hàng mới yêu cầu chỉ định một tập hợp các giá trị.

Trong CẬP NHẬT, công cụ LHS = RHS chỉ định một biểu thức mang lại giá trị đúng hoặc sai (hoặc có thể null :) và trong INSERT, mệnh đề VALUES về gán giá trị. Vì vậy, trong khi họ là bề ngoài tương tự, họ có ngữ nghĩa khá khác nhau, imho. Mặc dù tôi đã viết một trình phân tích cú pháp SQL, do đó có thể ảnh hưởng đến các quan điểm của tôi. :)

0

Tôi tin rằng điều này là để bạn có thể đưa ra tuyên bố chèn mà không phải rõ ràng về các giá trị. Nếu bạn đang đặt giá trị trong mỗi cột trong bảng, bạn có thể viết:

chèn vào giá trị my_table ("giá trị1", 2);

thay vì:

chèn vào my_table (column1, column2) giá trị ("value1", 2);

Khi nhập và xuất toàn bộ cơ sở dữ liệu (lớn), điều này là vô giá để giảm kích thước tệp và thời gian xử lý. Ngày nay, với ảnh chụp nhanh nhị phân và dạng tương tự, nó có thể "ít vô giá" :-)

5

SQL Server 2008 đã giới thiệu chức năng UPSERT qua lệnh MERGE. Đây là số tiền tương đương hợp lý của

IF FOUND THEN 
UPDATE 
ELSE 
INSERT 
Các vấn đề liên quan