【问题标题】:Change column order of a table in db2 luw在 db2 luw 中更改表的列顺序
【发布时间】:2020-01-07 18:32:06
【问题描述】:

我在 db2 luw 版本 10.5 中有以下列定义的表。我想更改 OPTCOUNTER 和 COMPNAME 列的顺序。

除了删除和重新创建表之外,还有什么方法可以做到这一点?

                                Data type                     Column
Column name                     schema    Data type name      Length     Scale Nulls
------------------------------- --------- ------------------- ---------- ----- ------
DATABASEVENDOR                  SYSIBM    VARCHAR                     32     0 Yes
EDITION                         SYSIBM    VARCHAR                     16     0 Yes
VERSION                         SYSIBM    SMALLINT                     2     0 Yes
RELEASE                         SYSIBM    SMALLINT                     2     0 Yes
MOD                             SYSIBM    SMALLINT                     2     0 Yes
FIXPACK                         SYSIBM    SMALLINT                     2     0 Yes
OPTCOUNTER                      SYSIBM    SMALLINT                     2     0 Yes
COMPNAME                        SYSIBM    VARCHAR                     32     0 No

  8 record(s) selected.

【问题讨论】:

  • 创建一个视图,其中列按所需顺序。

标签: db2 db2-luw


【解决方案1】:

首先,为什么要更改列顺序?从表格布局来看,这似乎没问题,因为您在固定长度列之后有可变长度列。

第二,不会简单地使用SELECT,在其中明确说明列名解决它...?

select DATABASEVENDOR, EDITION, VERSION, RELEASE, MOD, FIXPACK, COMPNAME, OPTCOUNTER
from MYTABLE

如果您想真正更改列顺序,请使用ALTER TABLE 并首先 DROP optcounter,然后再次添加它。

【讨论】:

  • 感谢您的更新。我希望这个表定义与另一个数据库同步。在另一个数据库表中,COMPNAME 名称列在前,然后是 OPTCOUNTER 列。
  • 好的,在这种情况下,您可以删除整个表并重新创建它,或者使用 ALTER TABLE 删除并添加列 optcounter。
  • @Lakshmikanth - 我必须在这里回应 data_henrik:列顺序应该是无关紧要的,并且被认为是实现细节。我不确定数据库是否需要按列出的顺序存储它(优先考虑一些优化可能性)。而且您应该始终明确列出您的列,否则列列表有点未定义;例如,当您执行此重命名时,没有列出列的任何人都会大吃一惊(并希望得到一个错误)。
【解决方案2】:

在应用程序方面,列顺序不应该是相关的,因为您应该在 SQL 语句中使用明确的列列表。

如果使用像 liquibase 这样的东西,列顺序是相关的,因为不同的列顺序总是被认为是数据库中的差异。

我的方法是(如果没有参照完整性/外键定义)在表上创建一个具有正确列顺序的表,将旧表中的数据加载到新表中,删除旧表并将新名称重命名为旧名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    相关资源
    最近更新 更多