为什么SQL INSERT和UPDATE语句有不同的语法?

问题描述:

在考虑this question关于SQL INSERT声明时,我想到两种声明在语法上的区别主要是人为的。也就是说,我们为什么不能做:为什么SQL INSERT和UPDATE语句有不同的语法?

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

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

也许我失去了一些东西的关键。但对于那些过去不得不连接我们的SQL语句的人来说,使用INSERTUPDATE语句的语法可以节省大量的编码。

+0

不是一个真正的问题= P – ajdams 2009-11-09 22:46:50

+0

抱歉,这是一个讨论型的问题,并不真正适合网站的意图。 – jkndrkn 2009-11-09 22:47:33

+0

@ajdams - 我不知道,但我相信,如果它可以在所有被要求,它应该是维基 – 2009-11-09 22:48:37

它们提供不同的语法功能。在更新中,您将指定一个筛选器,用于选择要应用更新的一组行。当然,为了相同的目的,该语法与SELECT查询共享。

在INSERT中,您没有选择任何行,您正在生成一个需要指定一组值的新行。

在更新中,LHS = RHS的东西是指定其产生真或假的(或也许空:)和在INSERT的表达式,VALUES子句是大约的值分配。所以虽然它们表面上相似,但它们在语义上完全不同,恕我直言。虽然我写了一个SQL解析器,所以可能会影响我的观点。 :)

我相信这样做是为了让你可以做一个插入语句,而不需要明确的值。如果您在表中的每一单个列放一个值,你可以这样写:

INSERT INTO my_table的值(“值1”,2);代替

插入到MY_TABLE(列1,列2)的值( “值1”,2);

导入和导出整个(大)的数据库的情况下,这是非常宝贵的削减文件大小和处理时间。如今,随着形式的快照之类的,也可能是“无价的少” :-)

的SQL Server 2008已经通过MERGE命令介绍UPSERT功能。这是逻辑等效的

IF FOUND THEN 
UPDATE 
ELSE 
INSERT