12

浏览了心爱的 W3schools 并找到了这个页面,实际上学到了一些有趣的东西。我不知道您可以在不指定值列的情况下调用插入命令。例如;

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

从我模糊的记忆中,我似乎记得 SQL 教授提到您必须将字段视为没有任何特定顺序(尽管 RDB 端有,但不能保证)。

我的问题是,服务器如何知道哪些值被分配给了哪些字段?* 我会自己测试这个,但我不会使用生产服务器来完成我目前可以访问的所有操作。

如果这项技术是特定的,我正在研究 PostgresSQL。这种特殊的语法有什么用?

4

6 回答 6

10

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

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

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

就其有用性而言,在生产代码中并没有那么多。如果您正在手动编写快速插入代码,那么它可能只会帮助您节省输入所有列名的时间。

于 2012-08-09T13:46:53.727 回答
5

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

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

你的教授是对的,这是懒惰的,容易坏掉。但对于快速而肮脏的惰性插入很有用。

于 2012-08-09T13:45:52.717 回答
2

I cannot resist to put a "RTFM" here.
The PostgreSQL manual details what happens in the chapter on INSERT:

The target column names can be listed in any order. If no list of column names is given at all, the default is all the columns of the table in their declared order; or the first N column names, if there are only N columns supplied by the VALUES clause or query. The values supplied by the VALUES clause or query are associated with the explicit or implicit column list left-to-right.

Bold emphasis mine.

于 2012-08-09T13:59:25.780 回答
0

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

于 2012-08-09T13:47:42.753 回答
0

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

于 2012-08-09T13:47:58.140 回答
0

创建表时,每列在系统表中都会有一个订单号。所以每个值都会按顺序插入..

Firt value will go to first column ... an so on

In sql server , system table syscolumn maintains this order. Postgresql should have something similar to this..

于 2012-08-09T13:48:40.053 回答