如何在现有表中的特定位置插入列?

时间:2014-01-24 10:29:02

标签: mysql sql

我创建了一个包含85列的表,但我错过了一列。错过的列应该是第57列。我不想删除该表并再次创建它。我正在寻找编辑该表并在第57个索引中添加一列。

我尝试了以下查询,但它在表的末尾添加了一列。

ALTER table table_name
Add column column_name57 integer

如何将列插入特定位置?

8 个答案:

答案 0 :(得分:47)

默认情况下,

ALTER TABLE会在表的末尾添加新列。使用AFTER指令将其放在表格中的某个位置:

ALTER table table_name
    Add column column_name57 integer AFTER column_name56

来自mysql doc

  

要在表格行的特定位置添加列,请使用FIRSTAFTER col_name 。默认是最后添加列。您还可以在FIRSTAFTER操作中使用CHANGEMODIFY来重新排序表格中的列。

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

我为PostgreSQL搜索了这个,但it seems to be impossible

答案 1 :(得分:2)

试试这个

ALTER TABLE tablename ADD column_name57 INT AFTER column_name56

See here

答案 2 :(得分:1)

ALTER TABLE table_name ADD COLUMN column_name57 INTEGER AFTER column_name56

答案 3 :(得分:0)

ALTER TABLE table_name ADD COLUMN column_name integer

答案 4 :(得分:0)

如果您说ADD COLUMN column_name则会抛出错误

你必须尝试

 ALTER TABLE temp_name ADD My_Coumn INT(1) NOT NULL DEFAULT 1

请记住,如果表已经有很少的记录,你必须创建新列,然后你必须让它可以为空或者你必须像我在查询中那样定义默认值

答案 5 :(得分:0)

SET
    @column_name =(
    SELECT COLUMN_NAME
FROM
    information_schema.columns
WHERE
    table_schema = 'database_name' AND TABLE_NAME = 'table_name' AND ordinal_position = 56
);
SET
    @query = CONCAT(
        'ALTER TABLE `table_name` ADD `new_column_name` int(5) AFTER ',
        @column_name
    );
PREPARE
    stmt
FROM
    @query;
EXECUTE
    stmt;
DEALLOCATE
    stmt;

答案 6 :(得分:-1)

我试着像这样改变表格:

table_name add column column_name after column column_name;

第一个column_name是新列名,第二个column_name是您计划在之后插入的现有列。

答案 7 :(得分:-1)

作为解决方法,可以考虑使用列重命名。 即在末尾添加新列,然后直到新列位于正确位置,为位置在新列之后的每个列添加一个临时列,将值从旧列复制到临时列,删除旧列列,最后重命名临时列。

另请参阅:https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1770086700346491686