MySQL Tablo Yapısında Değişiklik ve Taşıma
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.
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (2)
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;
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.