Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在现有表中的特定位置插入列?_Mysql_Sql - Fatal编程技术网

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

Mysql 如何在现有表中的特定位置插入列?,mysql,sql,Mysql,Sql,我创建了一个包含85列的表,但缺少一列。缺少的列应该是第57列。我不想删除该表并再次创建它。我希望编辑该表并在第57个索引中添加一列 我尝试了以下查询,但它在表的末尾添加了一列 ALTER table table_name Add column column_name57 integer 如何将列插入特定位置?默认情况下,ALTER TABLE会在表的末尾添加新列。使用AFTER指令将其放置在表中的某个位置: ALTER table table_name Add column colu

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

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

ALTER table table_name
Add column column_name57 integer

如何将列插入特定位置?

默认情况下,ALTER TABLE会在表的末尾添加新列。使用
AFTER
指令将其放置在表中的某个位置:

ALTER table table_name
    Add column column_name57 integer AFTER column_name56
来自mysql文档

要在表格行中的特定位置添加列,请先使用
后使用
列名。默认设置为最后添加列。您还可以在
CHANGE
MODIFY
操作中使用
FIRST
AFTER
对表中的列重新排序

我在PostgreSQL上搜索了这个,但是。

试试这个

ALTER TABLE tablename ADD column_name57 INT AFTER column_name56

如果您说添加列名,那么它将抛出错误

你必须试试看

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

请记住,如果表中已有少量记录,并且必须创建新列,则必须使其为空,或者必须像我在查询中所做的那样定义默认值

table_name add column column_name after column column_name;

第一个<代码>柱状名称<代码>是新的列名,第二个<代码>柱状名称< /代码>是您计划插入的现有列。

作为工作区,可以考虑使用列重命名。
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;
即在末尾添加新列,然后直到新列位于正确位置为止,为每个位置在新列之后的列添加临时列,将值从旧列复制到临时列,删除旧列,最后重命名临时列


另请参见:

您使用的是MySQL还是Postgres?Postgres只能在末尾放一个新列,这不是问题,因为表中列的顺序完全不相关。不需要在特定位置放置柱。如果您需要按特定顺序排列列,只需按该顺序将它们放入select中即可。从DB服务器的角度来看,列顺序完全无关。但编写代码和构造数据库也很重要,这样人类也能轻松理解一切。有时,为了清楚起见,以人性化的顺序设置列是很好的。
alter table add column
对Postgres有效,并且问题仍然被标记为
postgresql
。我不确定这个答案想要实现什么。已经有比这更有用的正确答案了,链接的帖子也与这个问题无关。对不起。我没有指出这篇文章只针对DBMS不支持AFTER关键字的用户,例如Oracle.Ah,这更有意义。谢谢你让我知道。
table_name add column column_name after column column_name;
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;