0

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

CREATE TABLE new_tbl SELECT * FROM orig_tbl;

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

我知道我可以像上面那样创建它并在之后使用 ALTER TABLE,但我的想法是,鉴于大量数据,ALTER 会花费很长时间(如果这是错误的,请与我相矛盾),这可能是如果我想要的可以保存。

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

谢谢。

4

2 回答 2

7

CREATE TABLE ... SELECT语法中所述:

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
于 2012-12-20T13:01:28.073 回答
2

@ 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 语句的字段列表的任何位置添加一列。你问这个问题已经有一段时间了,但我仍然希望能有所帮助。

于 2020-06-03T20:26:07.430 回答