データをコピーせずにテーブルをコピー


153
CREATE TABLE foo SELECT * FROM bar

テーブルfooをコピーして、という新しいテーブルとして複製しますbar

同様にデータコピーせずにfoo呼び出された新しいテーブルにスキーマをコピーするにはどうすればよいですか?bar


1
sqlserver 2005で同じことをする方法?
サンダー

バーからどういう意味ですか?
スミットサライヤー2017


@Thunderは、MS SQLで「列のみ」のコピーを実行できるように見えます。参考のためにこれを参照してください。stackoverflow.com/questions/2505728/...
ケビン・ワーシントン

回答:


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
これは制約やキーをコピーしていないようです
Timo Huovinen '27

15
@TimoHuovinen:多分create table NewTable like OldTableあなたのためのオプションです。リンクは削除された回答からコピーされました。
Andomar 2013年

1
ことは本当に負荷の下で、高い同時実行でこれを使用するには注意。私はこれを大規模に使用し、同じソーステーブルに基づいて約50の異なるテーブルを作成すると同時に、他のプロセスからソーステーブルに挿入しました。基本的に大規模なロックメルトダウンを引き起こし、MySQLを再起動する必要がありました。
マークB

6
ええと、OPは混乱していますか?タイトルに注意を払い、「... データコピーせずに ...」という質問に重点を置くと、これは明らかに不正解です。RCNellの回答は当然最高票です。これが受け入れられた理由がわかりません。言ってるだけ'。
xyphenor

421

試す

CREATE TABLE foo LIKE bar;

したがって、キーとインデックスもコピーされます。

ドキュメンテーション


40
これはインデックスもコピーするので、これはより良い答えです!
Chaitan 2013

2
それははるかに良いですが、それでも外部キーをコピーしません。
JosefSábl2014

@RCNeil、CREATE TABLE new_tbl LIKE orig_tbl;権限もコピーしますか?またはそれらを手動でコピーする必要がありますか?
Pacerier、2015

2
おそらく、この回答は正しいとマークされた回答より4年遅れて到着したためでしょう
pythonian29033

1
@ Pierre-OlivierVaresドキュメントのテキストは、実際の回答とは直接関係ありません。回答テキストは、質問の内容を簡潔に示していますが、ドキュメントリンクは追加のコンテキストを提供するだけです。そのため、ドキュメントのテキストで回答を膨らませても役に立ちません。
Abion47

27
SHOW CREATE TABLE bar;

そのテーブルのcreateステートメントを取得し、テーブル名などを編集して実行します。

これにより、インデックスをコピーしたり、テーブルの作成を手動で微調整したりできます。

プログラム内でクエリを実行することもできます。


どのようにshow create table barして動的に実行可能なステートメントに変換できますか?
Pacerier 2015

によって与えられた結果show create table barはすでに実行可能です。スクリプトにテーブルを作成する権限がある場合は、それを解析して、alter tableステートメントも実行できます。
Timo Huovinen、2015

create table...インデックスはコピーされません。この答えがより良い選択肢です
bluepinto

2

テーブルの構造のみを複製したい:

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

また、データをコピーしたい:

CREATE TABLE foo as SELECT * FROM bar;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.