2010-03-17 6 views

cevap

26

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. 
+0

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

+1

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

+0

harika nokta' group_concat_max_len' değişken hakkında düzenleme! Ben tam cümle elde etmedim, harika çalıştı! – AlexGH

21

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

3

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.

+2

gigabayt ;-) – zerkms

+0

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 –

+0

benim cevap söylediği gibi - adlandırmak için uygun bir yol rENAME TABLE (+ tabloları isimleri almak için information_shema) – zerkms

10

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