创建为选择并添加一个额外的列

时间:2012-12-20 13:00:16

标签: mysql database

我想创建一个MySQL表作为另一个表的副本,如下所示:

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

如果可能的话,我希望在创建时添加另一个空列,我将在稍后的时间填充该列。

我知道我可以像上面那样创建它并之后使用ALTER TABLE,但我的想法是,鉴于大量数据,ALTER需要很长时间(如果这是错误的话请反驳我),如果我想要的话可​​以保存。

所以,我想要一个额外的extra_col - varchar(64),我的原始查询是什么?

感谢。

2 个答案:

答案 0 :(得分:6)

正如CREATE TABLE ... SELECT Syntax所述:

  

您可以通过在SELECT语句末尾添加CREATE TABLE语句来创建另一个表:

CREATE TABLE new_tbl SELECT * FROM orig_tbl;
     

MySQL为SELECT中的所有元素创建新列。

     

[ deletia ]

     

请注意,SELECT语句中的列会附加到表格的右侧,而不是重叠在其上。

     

[ deletia ]

     

CREATE TABLE ... SELECT生成的表格中,仅在CREATE TABLE部分中命名的列首先出现。在这两个部分中或仅在SELECT部分中命名的列都在此之后。可以通过指定SELECT部分中的列来覆盖CREATE TABLE列的数据类型。

因此:

CREATE TABLE new_tbl (
  extra_col VARCHAR(64)
) SELECT * FROM orig_tbl

答案 1 :(得分:1)

@ user1703809如果要通过在Select语句中将多余的列放在末尾,将添加的列放在末尾,则有一种解决方法:

CREATE |TEMPORARY| TABLE IF NOT EXISTS new_tbl 
SELECT *, REPEAT('-',64) extra_col
FROM orig_tbl;

这将创建带有添加的列“ extra_col”的新表-varchar(64)。此外,如果适合您,则可以临时创建表,如果您只想创建一个空表以备将来使用,则只需在语句末尾添加“ LIMIT 0”。 此外,通过这种方式,您可以在Select语句的字段列表的任何位置添加一列。 自从您问了问题已经有一段时间了,但我仍然希望能对您有所帮助。