复制表而不复制数据


153
CREATE TABLE foo SELECT * FROM bar

复制表foo并将其复制为名为的新表bar

如何在复制数据的情况下将的架构复制foo到新表中?bar


1
在sqlserver 2005中怎么做?
雷霆

从酒吧意味着什么?
Smit Saraiya


@Thunder看起来您可以在MS SQL中创建“仅Colums”副本。仅供参考,请参阅本:stackoverflow.com/questions/2505728/...
凯文·沃辛顿

Answers:


140

尝试:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

要么:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0

4
@Thunder:尝试select * into foo from bar where 1=0
Andomar,2011年

29
这似乎并没有约束或键复制
蒂莫Huovinen

15
@TimoHuovinen:也许create table NewTable like OldTable您可以选择。从删除的答案复制的链接。
Andomar

1
在负载高并发情况下使用时要非常小心。我只是被大量使用,因此我们在基于同一源表的同时创建了约50个不同的表,同时又将其从其他进程插入到源表中。基本上导致了大规模的锁定崩溃,不得不重启MySQL。
Mark B

6
嗯,OP感到困惑吗?如果我们注意问题的标题和重点“ ... 而不复制数据...” ,那么这显然是对问题的错误答案。不知道为什么这个被接受。只是在说'。
xyphenor

421

尝试

CREATE TABLE foo LIKE bar;

因此,键和索引也将被复制。

文献资料


40
因为这也会复制索引,所以这是一个更好的答案!
柴坦

2
更好,但是仍然不复制外键。
JosefSábl2014年

@RCNeil,是否也CREATE TABLE new_tbl LIKE orig_tbl;复制特权?还是必须手动复制?
Pacerier

2
可能是因为此答案比标为正确答案的答案晚了4年
pythonian29033 '16

1
@ Pierre-OlivierVares文档文本与实际答案不直接相关。答案文本简洁明了,它显示了如何执行所问的问题,而文档链接仅提供了其他上下文。因此,使用文档中的文本来扩大答案无济于事。
Abion47年

27
SHOW CREATE TABLE bar;

您将获得该表的create语句,编辑表名或其他所需的内容,然后执行它。

这将允许您复制索引并手动调整表的创建。

您也可以在程序中运行查询。


您如何转换show create table bar为动态可执行语句?
Pacerier

给出的结果show create table bar已经是可执行的,如果脚本具有创建表的权限,则可以对其进行解析,然后再执行alter table语句。
Timo Huovinen'Feb 5'15

create table...将不会复制索引。这个答案是更好的选择
bluepinto

2

只想克隆表的结构:

CREATE TABLE foo SELECT * FROM bar WHERE 1 = 2;

还想复制数据:

CREATE TABLE foo as SELECT * FROM bar;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.