不指定列的SQL插入。会发生什么?

不指定列的SQL插入。会发生什么?,sql,postgresql,Sql,Postgresql,我正在浏览这些学校,发现了这一点,实际上学到了一些有趣的东西。我不知道您可以在不为值指定列的情况下调用insert命令。比如, INSERT INTO table_name VALUES (value1, value2, value3,...) 从我模糊的记忆中,我似乎还记得SQL教授提到,您必须将字段视为不按任何特定顺序处理(虽然RDB端有,但不能保证) 我的问题是,服务器如何知道哪些值被分配给了哪些字段?*我会自己测试这一点,但不打算使用生产服务器来完成这一点,这是我目前唯一可以访问的

我正在浏览这些学校,发现了这一点,实际上学到了一些有趣的东西。我不知道您可以在不为值指定列的情况下调用insert命令。比如,

INSERT INTO table_name
 VALUES (value1, value2, value3,...)
从我模糊的记忆中,我似乎还记得SQL教授提到,您必须将字段视为不按任何特定顺序处理(虽然RDB端有,但不能保证)

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


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

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

因此,如果表中有字段(a、b、c),a=value1,b=value2,c=value3


你的教授是对的,这是懒惰的,容易崩溃。但是对于快速而肮脏的惰性插入非常有用。

您的教授是正确的-您应该在命名值之前显式地命名列

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

这样做的问题是,如果顺序改变,或者删除或添加了列(即使它们可以为null),那么插入将中断


就其有用性而言,在生产代码中没有那么多。如果您正在手工编写快速插入代码,那么它可能会帮助您省去键入所有列名的麻烦。

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

< P>只有当您提供与列数相同的值时,该语法才可在不指定列的情况下工作。第二件更重要的事情是,sql表中的列总是以相同的顺序排列,这取决于表定义。sql表中唯一没有固有顺序的是行

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

第一个值将转到第一列。。。等等

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

我忍不住在这里加上一个“RTFM”。
PostgreSQL手册详细说明了发生的情况:

目标列名可以按任意顺序列出。如果没有 列名称是给定的,默认值是 表的声明顺序;或前N个列名(如果有) VALUES子句或查询仅提供N列。价值观 由VALUES子句或查询提供的与 从左到右显示或隐式列列表


粗体强调我的观点。

我同意你的看法。生产代码必须具有紧密耦合的b/w POJO字段名和列名。。。我在这里得到了我的答案,而不是来自FM。。。尽管如此,谢谢你,欧文。无论我走到哪里,我都能看到你的PostgreSQL智慧。这本手册可能会过时,而从本网页的回复中可以看到集体智慧。。。他们很清楚我的下一步行动。我将继续我的T-SQL习惯,即在语句的insert端和select端指定每个字段。