SQL INSERT没有指定列。怎么了?

时间:2012-08-09 13:43:19

标签: sql postgresql

正在寻找心爱的W3schools并找到了这个page并且实际上学到了一些有趣的东西。我不知道你可以在不指定值的列的情况下调用insert命令。例如;

INSERT INTO table_name
 VALUES (value1, value2, value3,...)

从我朦胧的记忆中拉出来,我似乎记得SQL教授提到你必须将字段视为不按任何特定顺序处理(尽管RDB方面有,但不能保证)。

我的问题是,服务器如何知道将哪些值分配给哪些字段?*我会自己测试一下,但我不会使用生产服务器来执行此操作,这是我目前可以访问的。

如果这项技术具体,我正在研究PostgresSQL。这个特殊的语法怎么有用呢?

6 个答案:

答案 0 :(得分:6)

你的教授是对的 - 你应该在命名值之前明确命名列。

在这种情况下,值将按照它们在表定义中出现的顺序插入。

这个问题是,如果该顺序发生变化,或者删除或添加了列(即使它们可以为空),那么插入将会中断。

就其实用性而言,在生产代码中并没有那么多。如果您正在编写快速插入代码,那么它可能只是帮助您节省键入所有列名称。

答案 1 :(得分:3)

它们按照表定义中的顺序插入到字段中。

因此,如果你的表有字段(a,b,c),a = value1,b = value2,c = value3。

你的教授是对的,这是懒惰的,容易打破。但对于快速和脏的懒惰插入很有用。

答案 2 :(得分:2)

我无法抗拒在这里放置“RTFM” PostgreSQL手册详细介绍了in the chapter on INSERT

的情况
  

目标列名称可以按任何顺序列出。如果没有清单   列名是完全给出的,默认是所有的列   表格按其声明的顺序;或者第一个 N 列名称,如果有的话   仅由VALUES子句或查询提供的 N 列。价值   由VALUES子句提供或查询与   显式或隐式列列表从左到右。

大胆强调我的。

答案 3 :(得分:0)

这些值的添加顺序与列中显示的列的顺序相同。它在你不知道你正在使用的列的名称但知道需要输入什么数据的情况下很有用。这通常不是一个好主意,尽管如果列的顺序当然会中断更改或新列插入中间。

答案 4 :(得分:0)

当且仅当您提供与列数相同的值时,该语法仅在不指定列的情况下有效。第二个更重要的是sql表中的列总是以相同的顺序,这取决于您的表定义。在sql表中唯一没有固有顺序的是行。

答案 5 :(得分:0)

创建表时,每列将在系统表中有一个订单号。因此,每个值都将按订单插入..

Firt值将转到第一列......依此类推

sql server中,系统表syscolumn维护此顺序。 Postgresql应该有类似的东西..