كيف يمكنني تغيير البادئات في جميع الجداول في MySQL DB؟

StackOverflow https://stackoverflow.com/questions/2466101

  •  20-09-2019
  •  | 
  •  

سؤال

تم تثبيت مزودتي على موقعي Drupal CMS. الآن أحتاج إلى نسخ جميع بياناتي من الموقع القديم. لديّ جداول بدون بادئات في ديسيبل القديم ، ولكن في ديسيبل جديدة جميع الجداول لها dp_[table_name] اختصار.

هل كانت مفيدة؟

المحلول

حل Zerkms لم ينجح بالنسبة لي. اضطررت إلى تحديد information_schema قاعدة البيانات لتكون قادرة على الاستعلام عن Tables الطاولة.

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

تعديل:

تحسين الاستعلام للاتصال فقط جدول إعادة تسمية مرة واحدة. شيء ما مشيت فيه هو حقيقة أن الإخراج المتسلسل قد تم اقتطاعه في 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.

نصائح أخرى

اكتب نصًا سيقوم بتشغيل جدول إعادة تسمية لكل جدول.

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

حيث يتوقع "اختبار" اسم قاعدة البيانات

بعد ذلك ، يمكنك الاستعلام الطويل الذي سيضيف البادئات إذا قمت بتنفيذها ؛-)

يتيح لك phpmyadmin القيام بذلك الآن. على مستوى "قاعدة البيانات" حدد علامة التبويب هيكل لرؤية جميع الجداول. انقر فوق "تحقق من الكل" (أسفل قائمة الجدول). في القائمة المنسدلة "مع المحدد" ، اختر: "استبدال بادئة الجدول".

يمكنك ببساطة تفريغ قاعدة البيانات ، وفتح تفريغ مع محرر نصوص ، واستبدال جميع حوادث "إنشاء جدول" باستخدام "إنشاء جدول DP_" واستعادة قاعدة البيانات. يستغرق بضع دقائق للقيام به.

إذا كان هناك شخص ما هناك ، إلا أنه يتساءل عن كيفية القيام بذلك (لأنه لم ينجح في تشكيل الخيارات الأخرى) ، فيمكنك تشغيل هذا (تغيير المتغيرات الثلاثة الأولى لقيمك ، بالطبع):

SET @database   = "database_name"; 
SET @old_prefix = "old_prefix_"; 
SET @new_prefix = "new_prefix_";
   SELECT
    concat(
        "RENAME TABLE ",
        TABLE_NAME,
        " TO ",
        replace(TABLE_NAME, @old_prefix, @new_prefix),
        ';'
    ) AS "SQL" FROM information_schema.TABLES WHERE TABLE_SCHEMA = @database;

وبعد ذلك ، سيتم مطالبتك بمجموعة من الاستعلامات اللازمة لتغيير جميع الجداول في قاعدة البيانات الخاصة بك. عليك ببساطة نسخ ذلك ، وتشغيله وفويلا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top