v2.5.2
Giriş yap

MySQL Tablo Yapısında Değişiklik ve Taşıma

mcfearcombat
344 defa görüntülendi

Merhabalar,

mevcutta kullandığım ve 24k satır veri olan bir MySQL tablom bulunmakta. Yeni geliştireceğim bir yapıdan dolayı veritabanını alt kısımdaki görselde öenekte verdiğim şekilde yeni bir tabloya aktarmak istiyorum. Görselde 1. durum şuanki kullandığım yapı ve 2. durum geçiş yapmak istediğim yapıdır.

En kolay ve kayıpsız şekilde yeni tabloma verileri nasıl bir komut ile aktarım sağlayabilirim.

Örnek :

Fikir ve yardımlarınız ile aydınlatabilirseniz sevinirim.

Cevap yaz
Cevaplar (2)
h4ckdr0
467 gün önce

Alternatif Kod:

START TRANSACTION;

INSERT INTO yeni_tablo (SKU, BARKOD)
SELECT DISTINCT eski_tablo.SKU, eski_tablo.BARKOD1 as BARKOD FROM eski_tablo
WHERE eski_tablo.BARKOD1 IS NOT NULL;

INSERT INTO yeni_tablo (SKU, BARKOD)
SELECT DISTINCT eski_tablo.SKU, eski_tablo.BARKOD2 as BARKOD FROM eski_tablo
WHERE eski_tablo.BARKOD2 IS NOT NULL;

INSERT INTO yeni_tablo (SKU, BARKOD)
SELECT DISTINCT eski_tablo.SKU, eski_tablo.BARKOD3 as BARKOD FROM eski_tablo
WHERE eski_tablo.BARKOD3 IS NOT NULL;

SET @row_count = ROW_COUNT();

IF (@row_count = 0) THEN
   ROLLBACK;
   SELECT 'Veri transferinde beklenmedik bir sorun oluştu!' AS Result;
ELSE
   DELETE FROM eski_tablo;
   COMMIT;
   SELECT 'Veri transfer işlemi başarıyla tamamlandı :)' AS Result;
END IF;
h4ckdr0
467 gün önce

SQL komutunu çalıştırırken 'TRANSACTION' kullanın. Bu, veri taşıma işlemi sırasında oluşabilecek hatalar nedeniyle veritabanınızın bozulmamasını sağlar. Eski tablo ile yeni tablodaki veri tiplerinin, birincil anahtar ve yabancıl anahtarların vs. aynı olduğundan emin olduktan sonra yeni tabloya verileri kayıpsız şekilde aktarmanız için aşağıdaki SQL komutunu kullanabilirsiniz:

START TRANSACTION;

INSERT INTO yeni_tablo (SKU, BARKOD)
SELECT DISTINCT eski_tablo.SKU, eski_tablo.BARKOD1 as BARKOD FROM eski_tablo
UNION
SELECT DISTINCT eski_tablo.SKU, eski_tablo.BARKOD2 as BARKOD FROM eski_tablo
UNION
SELECT DISTINCT eski_tablo.SKU, eski_tablo.BARKOD3 as BARKOD FROM eski_tablo;

SET @row_count = ROW_COUNT();

IF (@row_count = 0) THEN
   SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Veri transferinde beklenmedik bir sorun oluştu!';
ELSE
   DELETE FROM eski_tablo;
   COMMIT;
   SELECT 'Veri transfer işlemi başarıyla tamamlandı :)' AS Result;
END IF;

Bu kod bloğunda, veri taşıma işlemi 'START TRANSACTION' komutu ile başlatılır. Ardından, eski tablodaki veriler yeni tabloya taşınır. Eğer veri taşıma işlemi başarılı olursa, eski tablodaki veriler 'DELETE' komutu ile silinir ve işlem 'COMMIT' komutu ile tamamlanır. Ancak herhangi bir hata oluşursa veya yeni tabloya hiç veri eklenmezse, 'ROLLBACK' komutu ile tüm işlem geri alınır ve veritabanı eski haline geri döner.

Bu komut, eski tablonun tüm verilerini yeni tablonun BARKOD sütununa yerleştirir. Ancak, eski tablonun verilerinin kopyalanması sırasında aynı anahtarı kullanan kayıtların çiftleri oluşabilir. Bu nedenle, yeni tablonun anahtarının benzersiz olmasını sağlamak için önceden 'UNIQUE' kısıtını uygulamanızı öneririm.