كيفية إسقاط جميع الجداول في قاعدة البيانات دون إسقاط قاعدة البيانات نفسها؟

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

  •  28-09-2019
  •  | 
  •  

سؤال

أرغب في حذف جميع الجداول من قاعدة البيانات ، ولكن لا أحذف قاعدة البيانات نفسها. هل هو ممكن ؟ أنا فقط أبحث عن طريقة أقصر من إزالة قاعدة البيانات وإنشائها مرة أخرى. شكرًا !

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

المحلول

أقصر هو إعادة إنشاء قاعدة بيانات. ولكن إذا كنت لا تريد ...

هذا ل MySQL/PHP. لم يتم اختباره ولكن شيء من هذا القبيل.

$mysqli = new mysqli("host", "my_user", "my_password", "database");
$mysqli->query('SET foreign_key_checks = 0');
if ($result = $mysqli->query("SHOW TABLES"))
{
    while($row = $result->fetch_array(MYSQLI_NUM))
    {
        $mysqli->query('DROP TABLE IF EXISTS '.$row[0]);
    }
}

$mysqli->query('SET foreign_key_checks = 1');
$mysqli->close();

نصائح أخرى

لا توجد طريقة بسيطة للقيام بذلك. إما أن تحتاج إلى معرفة ماهية الجداول مقدمًا:

// تحرير يمكنك الحصول على هذه المعلومات باستخدام الاستعلام SHOW TABLE STATUS

$tables = array('users','otherdata');
foreach($tables as $table){
  db.execute("DROP TABLE "+$table);
}

أو يمكنك إسقاط قاعدة البيانات وإعادة إنشائها فارغة (إنها في الحقيقة ليست الكثير من الجهد!):

db.execute('DROP DATABASE SITEDATA');
db.execute('CREATE DATABASE SITEDATA');

يجب عليك إسقاط كل جدول في DB بشكل منفصل ، لذا فإن إسقاط قاعدة البيانات وإعادة إنشاءه سيكون في الواقع أقصر مسار (وأسرع مسار لهذه المسألة).

عندما اضطررت إلى القيام بذلك في Oracle ، سأكتب عبارة محددة من شأنها أن تنشئ عبارات جدول الإسقاط بالنسبة لي. شيء من أجل:

حدد "جدول إسقاط" || table_name || '؛' من user_tables ؛

يمكنني بعد ذلك تنشيط إخراج عبارة SELECT إلى ملف. بعد أن قمت بتشغيل هذا ، سيكون لدي ملف من شأنه أن يسقط جميع طاولاتي لي. سيبدو شيئًا مثل:

جدول Drop Table1 ؛

جدول Drop Table2 ؛

جدول Drop Table3 ؛

إلخ...

ليس خبيرًا في MySQL ، لكنني أتخيل أنه سيكون لديه منشأة مماثلة لكل من تحديد جميع الجداول للمخطط ، بالإضافة إلى الإخراج المباشر من عبارة SQL إلى ملف.

يستخدم SHOW TABLE STATUS للحصول على جميع الجداول في قاعدة البيانات الخاصة بك ، ثم حلقة على النتيجة وإسقاطها واحدة تلو الأخرى.

هناك بعض الحلول هنا في التعليقات: http://dev.mysql.com/doc/refman/5.1/en/drop-table.html

كنت بحاجة لإسقاط جميع الجداول باستثناء زوجين من تفريغ غير مقصود.

وظيفة PHP لإسقاط جميع الجداول باستثناء بعض (مقتبسة من هنا) ، لأي شخص آخر قد يحتاج:

<?php
$mysqli = new mysqli( "localhost", "user", 'password', "database");
function drop_all_tables($exceptions_array, $conn) {
    $exceptions_string="('" ;
    foreach ($exceptions_array as $table) {
        $exceptions_string .=$table . "','";
    }
    $exceptions_string=rtrim($exceptions_string, ",'");
    $exceptions_string .="')" ;
    $sql="SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ')
         FROM information_schema.tables
         WHERE table_schema = DATABASE() AND table_name NOT IN $exceptions_string";
    $result=$ conn->query($sql);
    while($row = $result->fetch_array(MYSQLI_NUM)) {
        $conn->query($row[0]);
    }
}

//drop_all_tables(array("table1","table2","table3","table4"), $mysqli);
?>

استعلام الخط المفرد لإسقاط جميع الجداول ، على النحو التالي:

$dbConnection = mysqli_connect("hostname", "username", "password", "database_name");
$dbConnection->query('SET foreign_key_checks = 0');

$qry_drop = "DROP TABLE IF EXISTS buildings, business, computer, education, fashion, feelings, food, health, industry, music, nature, people, places, religion, science, sports, transportation, travel";            
$dbConnection->query($qry_drop);

$mysqli->query('SET foreign_key_checks = 1');
$mysqli->close();

يمكنك تنفيذ هذا. فقط أضف المزيد من الجداول إذا فاتني أي

drop table wp_commentmeta;
drop table wp_comments;
drop table wp_links;
drop table wp_options;
drop table wp_postmeta;
drop table wp_posts;
drop table wp_term_relationships;
drop table wp_term_taxonomy;
drop table wp_termmeta;
drop table wp_terms;
drop table wp_usermeta;
drop table wp_users;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top