我想创建一个MySQL表作为另一个表的副本,如下所示:
CREATE TABLE new_tbl SELECT * FROM orig_tbl;
如果可能的话,我希望在创建时添加另一个空列,我将在稍后的时间填充该列。
我知道我可以像上面那样创建它并之后使用ALTER TABLE,但我的想法是,鉴于大量数据,ALTER需要很长时间(如果这是错误的话请反驳我),如果我想要的话可以保存。
所以,我想要一个额外的extra_col - varchar(64)
,我的原始查询是什么?
感谢。
答案 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语句的字段列表的任何位置添加一列。 自从您问了问题已经有一段时间了,但我仍然希望能对您有所帮助。