2009-11-16 104 views
7

当使用“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_4之前的COL_3。

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

谢谢。

+6

真的很重要吗?列顺序不应该与任何东西有关,除非你使用'select *',在这种情况下,你不应该...... – skaffman 2009-11-16 08:36:00

+0

@skaffman,我明白你的意思是select *有点粗糙。但能够使用它真的很好,特别是对于针对数据库发送的快速自定义查询。到目前为止,大家一直在使用select *,而我的选择是修复列或者重新编辑每个人(他们只是想让他们的工作快速而轻松地完成),他们需要使用正确的SQL。 “这些人”是程序员,而不是数据库程序员,他们发现需要编写庞大的查询来回答一个简单的问题。 – 2009-11-16 08:44:21

+0

@Robert Gould - 给人们一个可以使用的常见查询的文本文件,或者至少给他们“select ... FROM tablename”,他们可以放在其余的。 – 2009-11-16 08:46:14

回答

11

默认情况下,只在最后添加列。要在中间插入一列,必须删除并重新创建表和所有相关对象(约束条件,索引,默认值,关系等)。

有几个工具可以为您做到这一点,并根据表的大小,这可能是一个密集的操作。

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

+0

是的观点解决方案是我所知道的,并且将成为我的第一次尝试,但是有点希望得到一个更简单的解决方案:/ – 2009-11-16 08:45:41

2

ALTER TABLE TABLENAME ALTER COLUMN COLUMNNAME POSITION X;

+0

'POSITION'特定于MySQL吗? – 2009-11-16 15:36:22

+0

我在Firebird中使用它。 – 2009-11-17 07:13:03

+0

这也适用于MySQL。这不是标准的SQL。但是答案可能会帮助有类似问题的人使用支持这个的数据库 – 2009-11-18 11:22:22

1

我知道这是旧的主题(2009年),但也许这将帮助别人,看起来还是一个答案。在MySQL中,它可以工作2在表格的任何位置添加一列。

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

这是2输入文本列,但你可以设置ü想要的任何属性的新列,只要确保你所写的他们帽。

我发现它与Xampp,MySQL管理员,当我用它2在MySQL表中插入一列。

希望它有帮助。

5

它的工作原理。

ALTER TABLE tablename ADD columnname datatype AFTER columnname; 
+0

不适用于SQLite。 [来源](http://stackoverflow.com/a/22751857/3124150) – EmmanuelMess 2017-04-02 22:19:58