【问题标题】:SQL INSERT without specifying columns. What happens?SQL INSERT 不指定列。发生什么了?
【发布时间】:2012-08-09 13:43:19
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我同意你的看法。生产代码必须具有紧密耦合 b/w POJO 字段名称和列名称。
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      我忍不住在这里放一个“RTFM”。
      PostgreSQL 手册详细说明了in the chapter on INSERT

      目标列名可以按任意顺序列出。如果没有清单 列名完全给出,默认是所有列 表按照他们声明的顺序;或前 N 个列名,如果有 只是 VALUES 子句或 查询 提供的 N 列。价值 由 VALUES 子句或 query 提供的与 从左到右的显式或隐式列列表。

      我的大胆强调。

      【讨论】:

      • 然而……我在这里得到了答案,而不是来自 FM……即便如此,谢谢你,Erwin。无论我走到哪里,我都能看到您的 PostgreSQL 智慧。手册可能会过时,而在本网页的回复中可以看到集体智慧……它们使我的下一步行动非常清楚。我将继续我的 T-SQL 习惯,即在语句的插入端和选择端指定每个字段。
      • @Wellspring:对于在这方面符合 SQL 标准的任何 RDBMS 来说,这是一个养成的好习惯。 (很少有例外情况,例如动态 SQL。)
      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          初始值将转到第一列...以此类推

          sql server中,系统表syscolumn保持这个顺序。 Postgresql 应该有类似的东西..

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-27
            • 2010-11-15
            • 1970-01-01
            • 2017-08-08
            • 1970-01-01
            • 2014-03-20
            相关资源
            最近更新 更多