2010-03-17 11 views
22

मेरा प्रदाता मेरी साइट ड्रूपल सीएमएस में स्थापित है। अब मुझे पुरानी साइट से अपने सभी डेटा कॉपी करने की जरूरत है। मेरे पुराने डीबी में उपसर्ग के बिना टेबल हैं, लेकिन नए डीबी में सभी टेबलों में dp_[table_name] उपसर्ग है।मैं अपने MySQL डीबी में सभी तालिकाओं में उपसर्ग कैसे बदल सकता हूं?

उत्तर

26

zerkms समाधान मेरे लिए काम नहीं किया। Tables तालिका से पूछताछ करने में सक्षम होने के लिए मुझे information_schema डेटाबेस निर्दिष्ट करना था।

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'; 

संपादित करें:

केवल कॉल RENAME तालिका करने के लिए क्वेरी एक बार अनुकूलित। मैं जो कुछ चला गया वह तथ्य था कि समेकित आउटपुट 341 वर्णों पर छोटा हो गया। इस हल किया जा सकता है (यदि आपके सर्वर द्वारा अनुमति) एक उच्च मूल्य के लिए MySQL चर group_concat_max_len की स्थापना द्वारा:

SET group_concat_max_len = 3072; -- UTF8 assumes each character will take 3 bytes, so 3072/3 = 1024 characters. 
+0

सच है, यह मेरे लिए काम करता है क्योंकि मैं जूमला का उपयोग कर लोकहोस्ट एक्सएएमपीपी पर काम कर रहा था और मैं ऑटो जूमला उपसर्ग में बदलना चाहता था। मैं आपके चरणों का पालन करता हूं- मुझे 'info_schema''Tables' निर्दिष्ट करना था जैसा आपने किया था और SET group_concat_max_len = 10240 सेट किया था; मेरे मामले में क्योंकि कई टेबल थे। +1 – MJoraid

+1

एक और बिंदु, आप डेटाबेस पर तालिका को स्थानांतरित करने के लिए एक ही कमांड का उपयोग कर सकते हैं (बैकअप_डीबी कहें) जैसे: 'चुनें CONCAT (' RENAME टेबल ', TABLE_NAME,' to backup_db। ', TABLE_NAME,'; ') INFORMATION_SCHEMA से। तालिकाएं जहां table_schema = 'testbot'; ' – sactiw

+0

'group_concat_max_len' चर के बारे में संपादन को इंगित करता है! मुझे पूरा वाक्य नहीं मिला था, न ही महान काम किया! – AlexGH

21

एक ऐसी स्क्रिप्ट लिखें जो प्रत्येक तालिका के लिए RENAME तालिका चलाएगी।

SELECT 
    GROUP_CONCAT('RENAME TABLE `', TABLE_SCHEMA, '`.`', TABLE_NAME, '` TO `', TABLE_SCHEMA, '`.`prefix_', TABLE_NAME, '`;' SEPARATOR ' ') 
FROM 
    `TABLES` WHERE `TABLE_SCHEMA` = "test"; 

जहां "परीक्षण" डेटाबेस नाम

उम्मीद है इस के बाद आप कर सकते हैं लंबे क्वेरी कि उपसर्गों अगर आप निष्पादित यह ;-)

3

आप बस डेटाबेस डंप कर सकते हैं, डंप खोलने जोड़ देगा एक टेक्स्ट एडिटर के साथ, "टेबल बनाएं" के साथ "तालिका बनाएं" के सभी घटनाओं को प्रतिस्थापित करें और डेटाबेस को पुनर्स्थापित करें। ऐसा करने में कुछ मिनट लगते हैं।

+2

जब तक डेटाबेस कुछ गीगाबाइट्स से कम न हो ;-) – zerkms

+0

मैं गेम हूं। :) जीबी से बड़े डेटाबेस के लिए, एक क्वेरी टूल (उदाहरण के लिए एसक्यूएल वर्कबेंच) का उपयोग करें, तालिका सूची में सभी टेबल का चयन करें, सामग्री को स्प्रेडशीट के कॉलम ए में कॉपी करें (मेरे मामले में, कैल्क) और निम्नलिखित डालें कॉलम बी में सूत्र: = "नाम बदलें तालिका" और ए 1 और "डीपी_" और ए 1 & "; "सेल बी 1 से सूत्र को प्रत्येक अन्य बी कॉलम सेल में पेस्ट करें और नाम बदलें स्क्रिप्ट कॉलम बी! –

+0

में दिखाई देता है जैसा कि मैंने अपने उत्तर में कहा था - नाम बदलने का एक उचित तरीका है RENAME टेबल (+ info_shema टेबल नाम पुनर्प्राप्त करने के लिए) का उपयोग करना – zerkms

10

phpMyAdmin आप अब ऐसा करने के लिए अनुमति देता है। "डेटाबेस" स्तर पर सभी तालिकाओं को देखने के लिए संरचना टैब का चयन करें। 'सभी जांचें' पर क्लिक करें (तालिका सूची के नीचे)। 'चयनित' ड्रॉपडाउन पर चुनें: 'तालिका उपसर्ग बदलें'।

संबंधित मुद्दे