插入与插入


90

我已经在MS SQL中使用T-SQL已有一段时间了,无论何时我必须将数据插入表中时,我都倾向于使用语法:

INSERT INTO myTable <something here>

我知道关键字INTO在这里是可选的,我不必使用它,但是在我的情况下它逐渐成为一种习惯。

我的问题是:

  • 使用INSERT语法vs有什么含义INSERT INTO吗?
  • 哪一个完全符合标准?
  • 它们在SQL标准的其他实现中均有效吗?

Answers:


94

INSERT INTO是标准。尽管INTO在大多数实现中是可选的,但在少数实现中是必需的,因此最好包含它以确保代码可移植。

您可以在此处找到指向多个SQL标准版本的链接。我在这里找到了旧标准的HTML版本。


2
《 SQL-99完全,真的》一书指出,Sybase(以及MS SQL Server)的行为是非标准的,允许INTO是可选的。其他品牌的数据库需要关键字。
Bill Karwin

2
对。如果您始终使用INTO,则无需记住哪些人认为它是可选的。所有实现都允许使用它。
比尔蜥蜴

21

它们是同一件事,INTO在T-SQL中是完全可选的(其他SQL方言可能有所不同)。

与其他答案相反,我认为使用它会损害可读性INTO

我认为这是一个概念性的事情:据我所知,我没有在名为“ Customer”的表中插入,而是在插入Customer。(这与我使用单数而不是复数命名表的事实有关)。

如果您遵循第一个概念,INSERT INTO Customer很可能会为您“感觉正确”。

如果您遵循第二个概念,则很可能INSERT Customer适合您。


5
我认为这种方法的风险在于,您可能会导致新的程序员将对象与表混淆。
戴夫·杜普兰蒂斯

12
您的回答实际上是正确的。当人们否决反对的观点时,这是一种耻辱。我认为SO的好处之一就是听到这些不同意见。
DOK

不必在对象和表中进行思考。它以概念的方式将其视为实体关系模型。
安德烈·菲盖雷多

@DaveDuPlantis啊,杰基·特里霍恩谬误。+1
松饼

10

它在mySQL中可能是可选的,但在某些其他DBMS(例如Oracle)中是必需的。因此,对于SQL而言,使用INTO关键字具有更大的潜在价值。


4

我从这个问题中学到的一课是,您应该始终保持一致!如果您使用INSERT INTO,也不要使用INSERT。如果您不这样做,某些程序员可能会再次询问相同的问题。

这是我的另一个相关示例案例:我有机会在MS SQL 2005中更新一个非常长的存储过程。问题是,太多数据被插入到结果表中。我必须找出数据的来源。我试图找出在哪里添加了新记录。在SP的开始部分,我看到了几个INSERT INTO。然后,我尝试查找“ INSERT INTO”并进行了更新,但是我错过了仅使用“ INSERT”的地方。那个实际上在某些列中插入了4k +行的空数据!当然,我应该只搜索INSERT。但是,那件事发生在我身上。我责怪以前的程序员IDIOT :) :)


似乎作者使用INSERT INTO创建了它,并且有些人将INSERT放入了维护中。不幸的是,它发生了很多,远远超过了“应该”。
安德烈·菲格雷多

3

在SQL Server 2005中,您可能会在INSERT和INTO之间有这样的内容:

插入top(5)到tTable1 SELECT * FROM tTable2;

尽管它在没有INTO的情况下也可以工作,但我更喜欢使用INTO来提高可读性。


1

他们俩都做同样的事情。INTO是可选的(在SQL Server的T-SQL中),但有助于提高可读性。


0

我更喜欢使用它。它与SQL语言的其他部分(如group BY,)保持相同的语法描述感觉和可读性order BY


0

我开始在ORACLE上添加SQL,所以当我看到没有INTO的代码时,它看起来就“残破”且令人困惑。

是的,这只是我的观点,我并不是说您应该始终使用INTO。但这不是您不应该意识到的是,许多其他人可能也会想到同一件事,特别是如果他们还没有开始使用较新的实现编写脚本。

对于SQL,我认为认识到要在表中添加ROW而不使用对象也很重要。我认为将SQL表行/条目视为对象对新开发人员没有帮助。再说一次,只是我的意见。


0

如果可用,请使用标准功能。并不是您的特定数据库需要可移植性,而是您的SQL知识需要可移植性。一个特别讨厌的T-SQL示例是使用isull,请合并使用!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.