复制表而不复制数据

Mat*_*hew 131 mysql

CREATE TABLE foo SELECT * FROM bar
Run Code Online (Sandbox Code Playgroud)

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

如何将模式复制foo到一个新表bar 而不复制数据?

RCN*_*eil 374

尝试

CREATE TABLE foo LIKE bar;
Run Code Online (Sandbox Code Playgroud)

所以键和索引都被复制了.

文档

  • 这是一个更好的答案,因为这也复制索引! (35认同)
  • 它好多了,但仍然不复制外键. (2认同)
  • 为什么这没有被标记为正确答案? (2认同)
  • 可能是因为这个答案比标记为正确的答案晚了4年 (2认同)

And*_*mar 120

尝试:

CREATE TABLE foo SELECT * FROM bar LIMIT 0
Run Code Online (Sandbox Code Playgroud)

要么:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不复制约束或键 (27认同)
  • @TimoHuovinen:也许[`create table NewTable like OldTable`](http://blog.sarathonline.com/2011/06/mysql-copying-table-structures.html)是你的选择.从已删除答案复制的链接. (12认同)
  • 嗯,OP很困惑?如果我们注意问题的标题和重点是"......**而不是**复制数据......"RCNell的回答是最高的投票,这对于这个问题显然是一个错误的答案.不知道为什么这个被接受了.只是在说'. (4认同)
  • 我认为第二个例子是通用方式:-) (3认同)
  • @Thunder:尝试`select*into foo from bar,其中1 = 0` (3认同)
  • 在负载和高并发下使用它时*真的*小心。我刚刚大规模使用它,我们根据同一个源表创建了大约 50 个不同的表,同时从其他进程插入到源表中。基本上导致了大规模的锁崩溃,不得不重新启动 MySQL。 (3认同)

Tim*_*nen 23

SHOW CREATE TABLE bar;
Run Code Online (Sandbox Code Playgroud)

您将获得该表的create语句,编辑表名或您喜欢的任何其他内容,然后执行它.

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

您还可以在程序中运行查询.