MySQL'de, bir tablonun içeriği aynı veritabanı içindeki başka bir tabloya nasıl kopyalanır?


118

MySQL'de yeniyim. Bir tablonun içeriğini aynı veritabanı içindeki başka bir tabloya kopyalamak istiyorum. Temel olarak, başka bir tablodan bir tabloya eklemek istiyorum. Bunu yapmanın kolay bir yolu var mı?

Yanıtlar:


184

INSERT INTO TARGET_TABLE SELECT * FROM SOURCE_TABLE;

DÜZENLE: veya tabloların farklı yapıları varsa, şunları da yapabilirsiniz:

INSERT INTO TARGET_TABLE (`col1`,`col2`) SELECT `col1`,`col2` FROM SOURCE_TABLE;

DÜZENLEME: bunu sınırlamak için ..

INSERT INTO TARGET_TABLE (`col1_`,`col2_`) SELECT `col1`,`col2` FROM SOURCE_TABLE WHERE `foo`=1

Bu sorguyu çalıştırırken birisi kaynak tabloya ekleme işlemleri yapmak isterse ne olur? ekleme işlemini kilitler mi?
Lawakush Kurmi

135

Tablo yoksa, aynı şemaya sahip bir tane oluşturabilirsiniz:

CREATE TABLE table2 LIKE table1;

Ardından verileri kopyalamak için:

INSERT INTO table2 SELECT * FROM table1

1
Bu kodu buldum SELECT * INTO newTable FROM sourceTableiçinde W3School o çalışmıyor nedenMySQL
Kasun Siyambalapitiya

@KasunSiyambalapitiya SELECT ... INTO, bir tabloyu bir çıktı dosyasına veya değişkenlere aktarmak içindir; doğrudan masaya değil. Bkz. Dev.mysql.com/doc/refman/5.7/en/select-into.html
Doktor J

@Kasun Siyambalapitiya, w3school sayfasının MySQL için değil, farklı bir SQL için olduğunu. w3schools artık hata raporlama özelliğine sahip, sorun bulursanız, doğru bilgiye yardımcı olmak için kendi sitesinde bildirin.
Nightwolf

27

Tablo1 büyükse ve kopyalama işlemi süresince onu kilitlemek istemiyorsanız, bunun yerine bir döküm ve yükleme yapabilirsiniz:

CREATE TABLE table2 LIKE table1;

SELECT * INTO OUTFILE '/tmp/table1.txt' FROM table1;
LOAD DATA INFILE '/tmp/table1.txt' INTO TABLE table2;

Stackoverflow.com/a/9536680/351903 çözümünü kullanarak bir RDS'ye damping yapmayı denedim . Dosya oluşturuldu ancak uzun süre 0 boyutunda kaldı. Ayrıca, kontrol ederken show processlist, çalışan herhangi bir sorgu göremedim. Sorunun ne olduğundan emin değilim.
Sandeepan Nath

15

Bu benim için çalıştı

CREATE TABLE newtable LIKE oldtable;

Yeni tabloyu eski tablo ile çoğaltır

INSERT newtable SELECT * FROM oldtable;

Tüm satır verilerini yeni tabloya kopyalar.

teşekkür ederim


10

İçeriği tek çekimde oluşturmak ve kopyalamak istiyorsanız, SEÇİM'i kullanın:

TABLO OLUŞTUR new_tbl SELECT * Orig_tbl'den;


4
+1 - yeni tablo ilkinden dizin tanımlarına sahip olmasa da. "Oluştur ... beğen ..." yaklaşımı, dizin tanımlarını da kopyalayacaktır.
Martin

2

Bu benim için çalıştı. SELECT deyimini WHERE ve LIMIT yan tümceleriyle daha karmaşık hale getirebilirsiniz.

Önce büyük tablonuzu çoğaltın (veriler olmadan), aşağıdaki sorguyu çalıştırın ve ardından daha büyük tabloyu kesin.

INSERT INTO table_small (SELECT * FROM table_large WHERE column = 'value' LIMIT 100)

Çok basit. :-)


0
CREATE TABLE target_table SELECT * FROM source_table;

Sadece kaynak tablo ile aynı yapıya sahip yeni bir tablo oluşturur ve tüm satırları source_table'dan target_table'a kopyalar.

CREATE TABLE target_table SELECT * FROM source_table WHERE condition;

Target_table'a kopyalanacak bazı satırlara ihtiyacınız varsa, where cümlesinin içine bir koşul uygulayın


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.