Sağlayıcım siteme Drupal CMS'ye kuruldu. Şimdi tüm verilerimi eski siteden kopyalamam gerekiyor. Eski DB'imde önek içermeyen tablolar var, ancak yeni DB'de tüm tablolarda dp_[table_name]
öneki var.MySQL DB'mdeki tüm tablolardaki önekleri nasıl değiştirebilirim?
cevap
zerkms çözüm benim için çalışmadı. Tables
tablosunu sorgulamak için information_schema
veritabanını belirtmek zorunda kaldım.
SELECT
CONCAT('RENAME TABLE ', GROUP_CONCAT('`', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`')) AS q
FROM
`information_schema`.`Tables` WHERE TABLE_SCHEMA='test';
Düzenleme:
sadece çağrı RENAME TABLO sorgu kez optimize edilmiştir. İçine girdiğim bir şey, birleştirilmiş çıktının 341 karakterde kısaltılmış olmasıydı. Bu daha yüksek bir değere MySQL değişkeni group_concat_max_len
ayarlayarak (sunucunuza izin veriyorsa) çözülebilir:
SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters.
her tablo için RENAME TABLE çalışacak bir senaryo yazmak. "Test" bundan sonra veritabanı adını
bekleniyor
SELECT
GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ')
FROM
`TABLES` WHERE `TABLE_SCHEMA` = "test";
yapabilirsiniz sen, o
Sadece veritabanı dökümü olabilir ;-) yürütmek dökümü açarsanız önekleri katacak uzun sorgu Bir metin editörü ile "CREATE TABLE" ifadesinin tüm oluşumlarını "CREATE TABLE dp_" ile değiştirin ve veritabanını geri yükleyin. Yapılması birkaç dakika sürer.
gigabayt ;-) – zerkms
ben varım çift daha azdır. (Benim durumumda, Kireç olarak) bir e-tablonun A sütunundaki içerikleri kopyalamanız, masa listesindeki tüm tabloları seçin (örneğin, SQL Workbench'i) bir sorgu aracını kullanın GB'tan daha büyük veritabanları için :) ve aşağıdaki koymak ! B sütunundaki formülü: = "tablosunu yeniden adlandırmak" & A1 & "dp_ için" & A1 & "; "her diğer B sütunu hücreye hücre B1 den formülü yapıştırın ve yeniden adlandırma komut B sütunundaki görünür –
benim cevap söylediği gibi - adlandırmak için uygun bir yol rENAME TABLE (+ tabloları isimleri almak için information_shema) – zerkms
PhpMyAdmin Bunu şimdi yapmak için izin verir. "Veritabanı" düzeyinde tüm tabloları görmek için Yapı sekmesini seçin. 'Tümünü denetle'yi tıklayın (tablo listesinin altında). 'Seçili' açılır menüsünde şunları seçin: 'Tablo önekini değiştir'. veritabanına kadar
Doğru, bu Joomla kullanarak localhost XAMPP üzerinde çalışıyordu ve otomatik Joomla önekini değiştirmek istedim çünkü bu benim için çalıştı. Adımlarınızı takip ediyorum - yaptığınız gibi 'information_schema'.'Table'ları belirtmek zorundaydım ve SET_concat_max_len = 10240; Benim durumumda pek çok tablo vardı. ('Backup_db İÇİN. ' 'TABLO ADINI' tablo_ismi, tablo_ismi';') 'SEÇ CONCAT INFORMATION_SCHEMA GELEN: 1 – MJoraid
Bir sayı daha, sen gibi (backup_db diyelim) veritabanları arasında tablo taşımak için aynı komutunu kullanabilirsiniz. TABLOLAR NEREDE TABLE_SCHEMA = 'testbot'; ' – sactiw
harika nokta' group_concat_max_len' değişken hakkında düzenleme! Ben tam cümle elde etmedim, harika çalıştı! – AlexGH