هل هناك أمر MySQL لتنفيذ شيء مثل "انخفاض الجداول باستثناء T1 أو B2"؟

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

  •  12-09-2019
  •  | 
  •  

سؤال

أريد أن أبقي T1 و T2 وإسقاط جميع الجداول الأخرى.

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

المحلول

يمكنك استخدام information_schema للعثور على أسماء الجدول، وحتى تنسيق النتائج كمجموعة من DROP صياغات.

SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
  FROM information_schema.tables
  WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz');

(ال DATABASE() وظيفة إرجاع حاليا useقاعدة بيانات D.)

استخدام PREPARE و EXECUTE, ، يمكنك حتى تجنب نسخ ولصق، و (في MySQL 5.0.13 والإصدارات الأحدث) اكتب إجراء مخزن للقيام بذلك.

نصائح أخرى

يمكنك استخدام MySqldump لإنشاء قائمة ببيانات جدول الإسقاط، والتصفية من تلك التي لا تريدها، ثم إعادة توجيهها إلى عميل MySQL. إليك كيف نبني ذلك

أولا، إليك قائمة ببيانات جدول الجدول المنسدلة لقاعدة البيانات

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP 

الآن يمكننا أن الأنابيب التي من خلال GREP مع -V لإقلاع المباراة - نريد عبارات لا تذكر الجداول التي نحتفظ بها (وسيلة أخرى للقيام بذلك ستكون خيارات الجدول - Aignore إلى MySqldump)

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP |  
grep -v 'foo\|bar'

أخيرا، بمجرد واثق من ذلك، يمكنك أن تنتقل ذلك إلى MySQL

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \
grep ^DROP | \ 
grep -v 'foo\|bar' | \
mysql -uUSERNAME -pPASSWORD DATABASE
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top