mysql tablo kopyalama (mysql copy table)

Bir çok zaman veritabanı üzerinde bir işlem yapacağımızda, mevcut verileri yedekleme ihtiyacı duyuyoruz. (Şu anda da böyle bir şeye ihtiyaç duymuştuk)

Basit seviyeli bir şey olmasına rağmen insanın aklına basit çözüm gelemeyebiliyor. Bizim de aklımıza farklı metodlar geldi, sonra googledan en basit çözümü bulduk.

Aşağıdaki komut ile bir tabloyu başka bir tabloya kopyala-yapıştır yapmış oluyorsunuz.

CREATE TABLE yeni_tablo SELECT * FROM eski_tablo

Tabi içinde milyonlarca veri varsa, sürekli bu işlemi yapmanızı tavsiye edemeyeceğim. Yine de yedekleme hayat kurtarır diyorum.

ÖNEMLİ NOT Bu kopyalanan tabloda, ne primary key, ne index, ne unique key, hiç bir şey kopyalanmamış olduyor. Bu sebeple bu yöntemi sadece hızlı yedekleme amaçlı kullanmanızı tavsiye ederim.

Sql’den Mongo’ya eşleşmeler (Sql to Mongo mapping chart)

MySQL executable Oracle executable Mongo executable
mysqld oracle mongod
mysql sqlplus mongo

 

MySQL term Mongo term
database database
table collection
index index
row BSON document
column BSON field
join embedding and linking
primary key _id field

 

MongoDB sorguları JSON (BSON) nesneleri olarka belirtilir.  Bu sorguları sayfanın en altındaki linkten tıklayarak görebilrisiniz.

MOngoDB’deki sorgu ifadesi (ve index key gibi diğer şeyler ) JSON (BSON) olarak gösterilir. fakat, gerçek fiil(örneğin find() metodundaki find kelimesi) bir yazılım dili için bu kelimedir. (bu da şu an javascript shell i için böyledir. mongo shell den çalıştırılabilir) Bu fiiller (yani find gibi metodların isimleri ) yazılım dilinden diline değişkenlik gösterebilir. Örneğin bu javada find değil de fetch olabilir.

Daha fazla eşleşme bilgisi için lütfen mongodb.org sitesine bakınız : :http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

mysql join insert

Denormalizasyon yaptığım bir tablodaki longtext veri alanı olan sütunu ayrı bir tablo halinde sunmak istiyorum. Bu noktada, eski verilerin yeni yerine bir patch işlemi yapmadan taşımasını düşünmek adına, INSERT işlemini JOIN yaparak yapmak geldi aklıma. Bu konuda araştırdığıma göre;

Mysql de update, select ve delete query’lerinde yapılabilen JOIN ederek işlem yapma olayı , INSERT komutu ile çalışmamakta.

Yani sonuçta join edecek verisi yok ki içinde, ona göre işlem yapsın.

Bu noktada çözümü farklı bir yoldan bulmamız gerekti. ilk önce ilgili veri alanlarını select edip, yeni tablomuza  insert etmemiz gerekiyordu. Yaptık.

ÇÖZÜM

Yine mysql tarfında olayı çözebildik.
INSERT INTO tableNew (col1, col2)
SELECT tbl1.col1, tbl2.col2
FROM tbl1 LEFT OUTER JOIN tbl2 ON (tableNew.someColumn = tbl1.someColumn)

tabi on duplucate key kontrolü de isteğe göre yapılabilir.