在考虑this question关于SQL INSERT
语句的同时,我想到两个语句之间的语法区别很大程度上是人为的。也就是说,为什么我们不能这样做:
INSERT INTO MyTable SET Field1=Value1, Field2=Value2, ...
或
UPDATE MyTable ( Field1, Field2 ...) VALUES ( Value1, Value2, ... )
WHERE some-key = some-value
也许我错过了一些关键的东西。但对于我们这些过去必须连接我们的SQL语句的人来说,使用INSERT
和UPDATE
语句的可比语法会节省大量的编码。
答案 0 :(得分:6)
他们提供不同的语法功能。在更新中,您指定的过滤器选择要应用更新的一组行。当然,为了相同的目的,该语法与SELECT查询共享。
在INSERT中,您没有选择任何行,而是生成一个需要指定一组值的新行。
在UPDATE中,LHS = RHS的东西是指定一个产生true或false(或者可能是null)的表达式。在INSERT中,VALUES子句是关于赋值的。因此,虽然它们在表面上相似,但它们在语义上完全不同,imho。虽然我编写了一个SQL解析器,但这可能会影响我的观点。 :)
答案 1 :(得分:5)
SQL Server 2008通过MERGE命令引入了UPSERT功能。这是
的逻辑等价物IF FOUND THEN
UPDATE
ELSE
INSERT
答案 2 :(得分:0)
我相信这是你可以在不明确值的情况下制作插入语句。如果要在表中的每一列中放置一个值,则可以写:
插入my_table值(“value1”,2);
而不是:
插入my_table(column1,column2)值(“value1”,2);
导入和导出整个(大型)数据库时,这对于减少文件大小和处理时间非常有用。如今,使用二进制快照等,它可能“不太宝贵”: - )