Salin tabel tanpa menyalin data

153
CREATE TABLE foo SELECT * FROM bar

menyalin tabel foodan menduplikasinya sebagai tabel baru yang disebut bar.

Bagaimana saya bisa menyalin skema fooke tabel baru yang disebut bar tanpa menyalin data juga?

Matius
sumber
1
bagaimana melakukan hal yang sama di sqlserver 2005?
Guntur
apa artinya dari bar?
Smit Saraiya
1
@SmitSaraiya, foodan barmerupakan variabel tak beraturan yang sewenang-wenang , seperti halnya Alice dan Bob .
Chris
@Thunder sepertinya Anda dapat melakukan copy "Hanya colums" di MS SQL. Lihat ini untuk referensi: stackoverflow.com/questions/2505728/…
Kevin Worthington

Jawaban:

140

Mencoba:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

Atau:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0
Andomar
sumber
4
@Thunder: Cobaselect * into foo from bar where 1=0
Andomar
29
Ini sepertinya tidak menyalin batasan atau kunci
Timo Huovinen
15
@TimoHuovinen: Mungkin create table NewTable like OldTableada pilihan untuk Anda. Tautan disalin dari jawaban yang dihapus.
Andomar
1
Berhati - hatilah menggunakan ini di bawah beban dan pada konkurensi tinggi. Saya baru saja dibakar menggunakan ini pada skala, di mana kami membuat sekitar 50 tabel berbeda berdasarkan tabel sumber yang sama, pada saat yang sama dengan memasukkan ke dalam tabel sumber dari proses lain. Pada dasarnya menyebabkan krisis kunci besar dan harus me-restart MySQL.
Mark B
6
Uhm, OP bingung? Ini adalah jawaban yang salah untuk pertanyaan, jika kita memperhatikan judul dan penekanan pada pertanyaan "... tanpa menyalin data ..." Jawaban RCNell adalah yang berhak tertinggi. Tidak yakin mengapa yang ini diterima. Katakan saja.
xyphenor
421

Mencoba

CREATE TABLE foo LIKE bar;

jadi kunci dan indeks juga disalin.

Dokumentasi

RCNeil
sumber
40
Ini adalah jawaban yang lebih baik karena salinan ini juga mengindeks!
Chaitan
2
Ini jauh lebih baik, tetapi masih tidak menyalin kunci asing.
Josef Sábl
@RCNeil, Apakah CREATE TABLE new_tbl LIKE orig_tbl;salinan juga hak istimewa? Atau haruskah itu disalin secara manual?
Pacerier
2
Mungkin karena jawaban ini datang 4 tahun kemudian dari yang ditandai sebagai benar
pythonian29033
1
@ Pierre-OlivierVares Teks dokumentasi tidak langsung relevan dengan jawaban aktual. Teks jawaban ringkas dalam menunjukkan bagaimana melakukan apa yang ditanyakan, sementara tautan dokumentasi hanya menyediakan konteks tambahan. Karena itu, membengkaknya jawaban dengan teks dari dokumentasi tidak membantu.
Abion47
27
SHOW CREATE TABLE bar;

Anda akan mendapatkan pernyataan buat untuk tabel itu, edit nama tabel, atau apa pun yang Anda suka, dan kemudian jalankan.

Ini akan memungkinkan Anda untuk menyalin indeks dan juga secara manual mengubah pembuatan tabel.

Anda juga dapat menjalankan kueri dalam suatu program.

Timo Huovinen
sumber
Bagaimana Anda bisa mengubahnya show create table barmenjadi pernyataan yang dapat dieksekusi secara dinamis?
Pacerier
hasil yang diberikan oleh show create table barsudah dapat dieksekusi, jika skrip memiliki izin untuk membuat tabel, Anda bisa menguraikannya dan kemudian mengeksekusi pernyataan tabel alter juga.
Timo Huovinen
create table...tidak akan menyalin indeks. jawaban ini adalah pilihan yang lebih baik
bluepinto
2

Hanya ingin mengkloning struktur tabel:

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

Juga ingin menyalin data:

CREATE TABLE foo as SELECT * FROM bar;
Ali Azaz Alam
sumber