هل هناك أمر MySQL لتنفيذ شيء مثل "انخفاض الجداول باستثناء T1 أو B2"؟
سؤال
أريد أن أبقي 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