【问题标题】:Inserting new columns in the middle of a table?在表格中间插入新列?
【发布时间】:2009-11-16 08:32:34
【问题描述】:

当使用“ALTER TABLE tab ADD col”时,新列被添加到表的末尾。例如:

TABLE: TAB
COL_1 COL_2 COL_4

ALTER TABLE TAB ADD COL_3

桌子会变成

TABLE: TAB
COL_1 COL_2 COL_4 COL_3

但是,正如我的示例列的命名所暗示的那样,我实际上希望该表以这样的方式结束:

TABLE: TAB
COL_1 COL_2 COL_3 COL_4 

COL_3 在 COL_4 之前。

除了从头开始重建表之外,是否有任何标准 SQL 可以完成这项工作?但是,如果没有标准 SQL,我仍然可以使用一些供应商依赖的 Oracle 解决方案,但最好还是使用标准解决方案。

谢谢。

【问题讨论】:

  • 真的很重要吗?列顺序不应该与任何东西相关,除非你使用select *,在这种情况下,你不应该......
  • @skaffman,我明白你的意思 select * 有点粗糙。但是能够使用它真的很棒,特别是对于针对数据库发送的快速自定义查询。到目前为止,每个人都在使用 select * ,我的选择是修复列顺序或重新教育每个人(他们只是想快速轻松地完成工作)他们需要使用正确的 SQL。 “这些人”是程序员,但不是 DB 程序员,他们发现需要编写大量查询来回答一个简单的问题很麻烦。
  • @Robert Gould - 给人们一个包含他们可以使用的常见查询的文本文件,或者至少给他们“select ... FROM tablename”,然后他们可以输入其余的。
  • @Robert:这里有一个想法,然后:为每个表定义一个视图,该视图具有固定的列顺序,并让您的用户select * 来自该表而不是表。重新创建视图比重新创建表格要容易得多。
  • @skaffman,谢谢 :) 显然这就是我要解决问题的方法,因为我最初想做的事情似乎不可能。

标签: sql database oracle


【解决方案1】:

默认情况下,仅在末尾添加列。

要在中间插入一列,您必须删除并重新创建表和所有相关对象(约束、索引、默认值、关系等)。

有几个工具可以为您执行此操作,并且根据表的大小,这可能是一项密集的操作。

您也可以考虑在表格上创建按优先顺序显示列的视图(覆盖表格中的实际顺序)。

【讨论】:

  • 是的,视图解决方案是我所知道的,并且将是我的第一次尝试,但有点希望有一个更简单的解决方案:/
【解决方案2】:

有效。

ALTER TABLE tablename ADD columnname datatype AFTER columnname;

【讨论】:

  • 请告诉我上述查询的SQL兼容版本
【解决方案3】:

http://www.orafaq.com/wiki/SQL_FAQ#How_does_one_add_a_column_to_the_middle_of_a_table.3F 表示无法完成,并建议重命名表并执行create table as select... 或(我不熟悉的东西)“使用 DBMS_REDEFINITION 包更改结构”的变通方法。

【讨论】:

    【解决方案4】:

    更改表表名 更改列列名 X 位置;

    【讨论】:

    • POSITION 是 MySQL 特有的吗?
    • 这也适用于 MySQL。这不是标准的 SQL。但答案可能会帮助有类似问题的人使用支持此功能的数据库
    • 我做错了吗? alter table expense_testTable alter column col3 POSITION 3; 它给出的错误: ERROR 1064 (42000): You have an error in your SQL syntax;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“POSITION 3”附近使用正确的语法
    【解决方案5】:

    我知道这是个老话题(2009 年),但也许它会对仍在寻找答案的人有所帮助。在 MySQL 中,它的工作原理是 2 在表中的任意位置添加一列。

    ALTER TABLE `tablename` ADD `column_name1` TEXT NOT NULL AFTER `column_name2`;
    

    这是 2 输入一个文本列,但是您可以为新列设置您想要的任何属性,只要确保您用大写字母编写它们。

    我在 Xampp 中找到了它,MySQL 管理员,当我使用它时 2 在 MySQL 表的中间插入一列。

    希望对你有帮助。

    【讨论】:

      【解决方案6】:

      根据我的小型研究,唯一的方法是以所需的列顺序创建前一个表的视图,或者从头开始重新创建表,在某些 sql 查询工具中,'AFTER' 关键字可能会起作用“。

      【讨论】:

        【解决方案7】:

        如果你有表 col_1、col_2、col_4,你想在 col_2 之后添加 col_3,你可以这样做:

        alter table <table_name> modify col_4 invisible;
        alter table <table_name> add col_3 <type>;
        alter table <table_name> modify col_4 visible;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-11
          • 2016-11-07
          • 2011-05-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多