Verileri kopyalamadan tabloyu kopyalama


153
CREATE TABLE foo SELECT * FROM bar

tabloyu kopyalar ve fooyeni bir tablo olarak çoğaltır bar.

Nasıl şemasını kopyalayabilirsiniz fooyeni bir tabloya denilen bar olmadan yanı veriler üzerinde kopyalama?


1
aynı şeyi sqlserver 2005'te nasıl yapılır?
Thunder

bardan ne demek?
Smit Saraiya


@Thunder, MS SQL'de "Yalnızca sütunlar" kopyasını yapabileceğiniz gibi görünüyor. Referans için bakınız: stackoverflow.com/questions/2505728/…
Kevin Worthington

Yanıtlar:


140

Deneyin:

CREATE TABLE foo SELECT * FROM bar LIMIT 0

Veya:

CREATE TABLE foo SELECT * FROM bar WHERE 1=0

4
@Thunder: Deneyinselect * into foo from bar where 1=0
Andomar

29
Bu kısıtlamaları veya anahtarları kopyalamıyor gibi görünüyor
Timo Huovinen

15
@TimoHuovinen: Belki create table NewTable like OldTablesizin için bir seçenek. Bağlantı silinen yanıttan kopyalandı.
Andomar

1
Bunu yük altında ve yüksek eşzamanlı olarak kullanma konusunda gerçekten dikkatli olun . Ben sadece aynı kaynak tabloya dayalı yaklaşık 50 farklı tablolar oluşturduk, aynı zamanda diğer süreçlerden kaynak tabloya ekleme ile aynı ölçekte kullanarak yakıldı. Temelde büyük bir kilit erimesine neden oldu ve MySQL'i yeniden başlatmak zorunda kaldı.
Mark B

6
Uhm, OP kafası karışık mı? Biz başlık ve söz konusu vurgu dikkat, bu, pervasızca soruya yanlış cevap "... olmadan veri kopyalayarak ..." RCNell cevabı haklı yüksek oyu edilir. Bunun neden kabul edildiğinden emin değilim. Sadece söylüyorum'.
xyphenor

421

Deneyin

CREATE TABLE foo LIKE bar;

böylece anahtarlar ve dizinler de kopyalanır.

belgeleme


40
Bu daha iyi bir yanıttır, çünkü bu dizinleri de kopyalar!
Chaitan

2
Çok daha iyi, ama yine de yabancı anahtarları kopyalamıyor.
Josef Sábl

@RCNeil, CREATE TABLE new_tbl LIKE orig_tbl;Kopya ayrıcalıkları da var mı? Yoksa bunlar manuel olarak mı kopyalanmalıdır?
Pacerier

2
Muhtemelen bu cevap doğru olarak işaretlenen cevaptan 4 yıl sonra geldiğinden
pythonian29033

1
@ Pierre-OlivierVares Dokümantasyon metni gerçek cevapla doğrudan ilgili değildir. Yanıt metni, sorunun sorulmasının nasıl yapılacağını gösteren özlüdür, ancak dokümantasyon bağlantısı sadece ek bağlam sağlar. Bu nedenle, cevabı dokümantasyondaki metinle şişirmek yararlı değildir.
Abion47

27
SHOW CREATE TABLE bar;

söz konusu tablo için bir create deyimi alır, tablo adını veya istediğiniz herhangi bir şeyi düzenler ve sonra yürütürsünüz.

Bu, dizinleri kopyalamanıza ve ayrıca tablo oluşturma işlemini el ile değiştirmenize olanak tanır.

Sorguyu bir program içinde de çalıştırabilirsiniz.


show create table barDinamik olarak yürütülebilir bir ifadeye nasıl dönüştürebilirsiniz ?
Pacerier

tarafından verilen sonuç show create table barzaten çalıştırılabilir, komut dosyasının tablo oluşturma izni varsa, onu ayrıştırabilir ve sonra tablo tablolarını da değiştirebilirsiniz.
Timo Huovinen

create table...dizinleri kopyalamaz. bu cevap daha iyi bir seçenektir
bluepinto

2

Sadece tablonun yapısını klonlamak istiyorum:

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

Ayrıca verileri kopyalamak istiyor:

CREATE TABLE foo as SELECT * FROM bar;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.