MySQL DROP semua tabel, mengabaikan kunci asing

403

Apakah ada cara mudah yang bagus untuk menjatuhkan semua tabel dari database MySQL, mengabaikan batasan kunci asing yang mungkin ada di sana?

bcmcfc
sumber
1
Kecuali Anda memiliki banyak entitas lain, mengapa tidak hanya DROP DATABASE dan mulai dari awal?
StuartLC
161
Untuk mempertahankan hak pengguna.
bcmcfc
5
Saya baru menyadari bahwa sementara itu Anda mendapat jawaban oleh Dion Truter yang lebih lengkap daripada milik saya dan menyarankan untuk menerimanya sebagai gantinya. (bagian "jatuhkan semua tabel" tidak ditanggung oleh saya)
chiccodoro
5
Jika Anda memiliki phpMyAdmin diinstal, mudah untuk memilih semua tabel dan menjatuhkannya.
Pengguna
1
Itu benar tetapi hanya untuk phpMyAdmin dalam versi 4.x. Jika Anda memilih semua tabel dan memilih Dropdari menu dropdown, Anda dapat menghapus Foreign key checkcentang pada kotak centang.
jmarceli

Jawaban:

474

Saya menemukan set pernyataan drop yang dihasilkan berguna, dan merekomendasikan tweak ini:

  1. Batasi tetes yang dihasilkan untuk basis data Anda seperti ini:
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

Catatan 1: Ini tidak menjalankan pernyataan DROP, itu hanya memberi Anda daftar mereka. Anda perlu memotong dan menempelkan output ke mesin SQL Anda untuk menjalankannya.

Catatan 2: Jika Anda memiliki LIHAT, Anda harus memperbaiki setiap DROP TABLE `VIEW_NAME`pernyataan DROP VIEW `VIEW_NAME`secara manual.

  1. Catatan, per http://dev.mysql.com/doc/refman/5.5/en/drop-table.html , menjatuhkan dengan cascade tidak ada gunanya / menyesatkan:

"RESTRICT dan CASCADE diizinkan untuk membuat porting lebih mudah. ​​Di MySQL 5.5, mereka tidak melakukan apa-apa."

Oleh karena itu, agar pernyataan drop berfungsi jika Anda membutuhkan:

SET FOREIGN_KEY_CHECKS = 0

Ini akan menonaktifkan pemeriksaan integritas referensial - jadi ketika Anda selesai melakukan tetesan yang Anda butuhkan, Anda ingin mengatur ulang pemeriksaan kunci

SET FOREIGN_KEY_CHECKS = 1
  1. Eksekusi akhir akan terlihat seperti:
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;

NB: untuk menggunakan output SELECT lebih mudah, opsi mysql -B dapat membantu.

Dion Truter
sumber
6
@Timmm: Saya telah menulis 3 tetes jawaban saya - namun, ini juga tidak mengeksekusi mereka. Anda harus menyalinnya dari Stackoverflow dan menempelkannya di Workbench MySQL Anda atau di mana pun. Dengan pilih di atas Anda mendapatkan semua tetes yang cocok "gratis". Anda hanya perlu menyalin-menempelkannya.
chiccodoro
3
Ya saya tahu, tapi saya ingin menggunakannya dalam naskah. Apa yang akhirnya saya lakukan adalah DROP DATABASE foo; CREATE DATABASE foo;, yang tidak sama tetapi bekerja untuk saya.
Timmmm
2
Tidak nyaman ketika ada ratusan tabel, tetapi lebih baik daripada tidak sama sekali jika membuat ulang database bukan pilihan.
Nicolas Raoul
2
@ Timimm: Melihat ini lagi - Anda benar, itu tidak sepenuhnya menjawab pertanyaan. Jawaban Jean terlihat menjanjikan - ia menghasilkan secara otomatis pernyataan DROP dan menjalankannya, sambil menerapkan SET FOREIGN_KEY_CHECKS dengan benar sebelum dan sesudah.
chiccodoro
1
gunakan terminal jika Anda berada di linux atau mac dan itu akan bekerja untuk masuk ke tipe akun mysql Anda: mysql -u <username> -p lalu tekan enter sekarang masukkan kata sandi Anda pilih database lalu tulis kode di atas untuk menghapus tabel
ismnoiet
132

Dari http://www.devdaily.com/blog/post/mysql/drop-mysql-tables-in-any-order-foreign-keys :

SET FOREIGN_KEY_CHECKS = 0;
drop table if exists customers;
drop table if exists orders;
drop table if exists order_details;
SET FOREIGN_KEY_CHECKS = 1;

(Perhatikan bahwa ini menjawab cara menonaktifkan pemeriksaan kunci asing agar dapat menjatuhkan tabel dalam urutan sewenang-wenang. Itu tidak menjawab bagaimana secara otomatis menghasilkan pernyataan drop-table untuk semua tabel yang ada dan menjalankannya dalam satu skrip. Jawaban Jean tidak.)

chiccodoro
sumber
10
Jika Anda menggunakan MySQL Workbench, Anda dapat menghindari mengetik semua nama tabel dengan memilih semua tabel di kolom kiri, mengklik kanan, lalu opsi 'jatuhkan tabel'. TI akan menghasilkan SQL yang dapat Anda salin dan tempel di antara pernyataan SET FOREGIN_KEY_CHECKS - mungkin serupa dengan GUI lain.
chris
terima kasih membantu, dan @chris sangat membantu, harus menambahkan jawaban
Andrew
97

Inilah prosedur tersimpan SurlyDre yang dimodifikasi sehingga kunci asing diabaikan:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name 
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    SET FOREIGN_KEY_CHECKS = 0;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql = CONCAT('DROP TABLE ', _tableName);
        PREPARE stmt1 FROM @stmt_sql;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;
    SET FOREIGN_KEY_CHECKS = 1;
END$$

DELIMITER ;

call drop_all_tables(); 

DROP PROCEDURE IF EXISTS `drop_all_tables`;
Jean-François Beauchamp
sumber
2
Bekerja pada tabel, gagal menghapus tampilan. Masih mengurangi saya mengetik secara besar-besaran :) thx.
chrisinmtown
7 tahun kemudian saya akan mengatakan Anda harus membungkusnya _tableNamedengan backquotes. Kalau tidak, itu akan gagal pada beberapa tabel seperti groupatau kata kunci lainnya.
sashaaero
Jaga pandangan! SELECT table_name FROM information_schema.TABLES WHERE table_schema = SCHEMA () AND table_type = "BASE TABLE";
laurent belloeil
42

setiap pendekatan di atas mencakup lebih banyak pekerjaan daripada yang AFAICT ini ...

( mysqldump --add-drop-table --no-data -u root -p database | grep 'DROP TABLE' ) > ./drop_all_tables.sql
mysql -u root -p database < ./drop_all_tables.sql
SkyLeach
sumber
2
mengapa tidak hanya pipa mysqldumpke mysql, tanpa melalui file?
Rolf
2
@Rolf tidak ada alasan khusus. Hancurkan diri Anda.
SkyLeach
2
Terima kasih, saya sudah melakukannya, dihapus kurung dan disalurkan mysqldumpke grepdalam mysql, ia bekerja. Sekali lagi terima kasih atas solusinya, itu bagus.
Rolf
5
Yang satu ini tidak memiliki batasan kunci asing; Saya telah menambahkan skrip bash di sini berdasarkan jawaban Anda: gist.github.com/cweinberger/c3f2882f42db8bef9e605f094392468f
cweinberger
sooooooooooooo pintar!
zx1986
25

Dari jawaban ini ,

menjalankan:

  use `dbName`; --your db name here
  SET FOREIGN_KEY_CHECKS = 0; 
  SET @tables = NULL;
  SET GROUP_CONCAT_MAX_LEN=32768;

  SELECT GROUP_CONCAT('`', table_schema, '`.`', table_name, '`') INTO @tables
  FROM   information_schema.tables 
  WHERE  table_schema = (SELECT DATABASE());
  SELECT IFNULL(@tables, '') INTO @tables;

  SET        @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
  PREPARE    stmt FROM @tables;
  EXECUTE    stmt;
  DEALLOCATE PREPARE stmt;
  SET        FOREIGN_KEY_CHECKS = 1;

Ini menjatuhkan tabel dari database yang sedang digunakan. Anda dapat mengatur basis data saat ini menggunakan use.


Atau sebaliknya, jawaban yang diterima Dion lebih sederhana, kecuali Anda perlu menjalankannya dua kali, pertama untuk mendapatkan kueri, dan kedua untuk menjalankan kueri. Saya memberikan beberapa tanda centang konyol untuk melarikan diri karakter khusus dalam nama db dan tabel.

  SELECT CONCAT('DROP TABLE IF EXISTS `', table_schema, '`.`', table_name, '`;')
  FROM   information_schema.tables
  WHERE  table_schema = 'dbName'; --your db name here
nawfal
sumber
Solusi singkat dan bersih. Jauh lebih baik daripada prosedur alternatif.
Rafael Renan Pacheco
16

Inilah solusi berbasis kursor. Agak panjang tetapi berfungsi sebagai kumpulan SQL tunggal:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name 
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql = CONCAT('DROP TABLE ', _tableName);
        PREPARE stmt1 FROM @stmt_sql;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;

END$$

DELIMITER ;

call drop_all_tables(); 

DROP PROCEDURE IF EXISTS `drop_all_tables`;
SurlyDre
sumber
2
Bagus, tetapi sayangnya tidak menangani kunci asing.
Timmmm
11

Anda dapat melakukan:

select concat('drop table if exists ', table_name, ' cascade;')
  from information_schema.tables;

Kemudian jalankan kueri yang dihasilkan. Mereka akan menjatuhkan setiap tabel pada database saat ini.

Berikut ini beberapa bantuan pada drop tableperintah.

Pablo Santa Cruz
sumber
Jawaban di atas mengasumsikan bahwa ||diatur untuk menjadi operator gabungan. Lebih khusus lagi, mode MySQL SQL berisi PIPES_AS_CONCAT. Referensi: dev.mysql.com/doc/refman/5.0/en/…
Ionuț G. Stan
@Ionut: keren! terima kasih telah menunjukkan itu. Memperbaiki contoh kode untuk digunakan concatsebagai ganti||
Pablo Santa Cruz
9

Saya datang dengan modifikasi ini pada jawaban Dion Truter untuk membuatnya lebih mudah dengan banyak tabel:

SET GROUP_CONCAT_MAX_LEN = 10000000;
SELECT CONCAT('SET FOREIGN_KEY_CHECKS=0;\n', 
              GROUP_CONCAT(CONCAT('DROP TABLE IF EXISTS `', table_name, '`')
                           SEPARATOR ';\n'),
              ';\nSET FOREIGN_KEY_CHECKS=1;')
FROM information_schema.tables
WHERE table_schema = 'SchemaName';

Ini mengembalikan semuanya dalam satu bidang, sehingga Anda bisa menyalin satu kali dan menghapus semua tabel (gunakan Copy Field Content (unquoted)di Workbench). Jika Anda memiliki BANYAK tabel, Anda dapat mencapai batas tertentu GROUP_CONCAT(). Jika demikian, tambah variabel maks len (dan max_allowed_packet, jika perlu).

Ryan P
sumber
SET GROUP_CONCAT_MAX_LEN adalah trik yang saya butuhkan. Saya memiliki skrip yang berfungsi, tetapi selalu gagal pertama kali dengan beberapa nama tabel terpotong, dan kemudian berhasil diselesaikan saat dijalankan kedua kalinya. Terima kasih!
dualmon
8

Satu liner untuk menjatuhkan semua tabel dari database yang diberikan:

echo "DATABASE_NAME"| xargs -I{} sh -c "mysql -Nse 'show tables' {}| xargs -I[] mysql -e 'SET FOREIGN_KEY_CHECKS=0; drop table []' {}"

Menjalankan ini akan menjatuhkan semua tabel dari database DATABASE_NAME.

Dan hal yang menyenangkan tentang ini adalah bahwa nama database hanya ditulis secara eksplisit satu kali.

mgershen
sumber
1
ini bekerja untuk saya tetapi, saya harus mengganti -i dengan -I di macOS High Sierra
Ali Selcuk
1
Terima kasih @AliSelcuk. Baik -i dan -Saya bekerja untuk saya di Ubuntu, jadi saya akan mengubahnya ke -Saya agar ini berfungsi untuk macOS juga.
mgershen
1
Sangat bermanfaat, terima kasih! Saya harus memberikan kata sandi menggunakan -pPASSWORD (tidak ada ruang antara -p dan PASSWORD) untuk kedua perintah mysql
Mike
8

Googling pada topik selalu membawa saya ke pertanyaan SO ini jadi di sini berfungsi kode mysql yang menghapus KEDUA tabel dan tampilan:

DROP PROCEDURE IF EXISTS `drop_all_tables`;

DELIMITER $$
CREATE PROCEDURE `drop_all_tables`()
BEGIN
    DECLARE _done INT DEFAULT FALSE;
    DECLARE _tableName VARCHAR(255);
    DECLARE _cursor CURSOR FOR
        SELECT table_name
        FROM information_schema.TABLES
        WHERE table_schema = SCHEMA();
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET _done = TRUE;

    SET FOREIGN_KEY_CHECKS = 0;

    OPEN _cursor;

    REPEAT FETCH _cursor INTO _tableName;

    IF NOT _done THEN
        SET @stmt_sql1 = CONCAT('DROP TABLE IF EXISTS ', _tableName);
        SET @stmt_sql2 = CONCAT('DROP VIEW IF EXISTS ', _tableName);

        PREPARE stmt1 FROM @stmt_sql1;
        PREPARE stmt2 FROM @stmt_sql2;

        EXECUTE stmt1;
        EXECUTE stmt2;

        DEALLOCATE PREPARE stmt1;
        DEALLOCATE PREPARE stmt2;
    END IF;

    UNTIL _done END REPEAT;

    CLOSE _cursor;
    SET FOREIGN_KEY_CHECKS = 1;
END$$

DELIMITER ;

call drop_all_tables();

DROP PROCEDURE IF EXISTS `drop_all_tables`;
Sergey Alaev
sumber
6

Berikut adalah cara otomatis untuk melakukan ini melalui skrip bash:

host=$1
dbName=$2
user=$3
password=$4

if [ -z "$1" ]
then
    host="localhost"
fi

# drop all the tables in the database
for i in `mysql -h$host -u$user -p$password $dbName -e "show tables" | grep -v Tables_in` ; do  echo $i && mysql -h$host -u$user -p$password $dbName -e "SET FOREIGN_KEY_CHECKS = 0; drop table $i ; SET FOREIGN_KEY_CHECKS = 1" ; done
kfox
sumber
Sangat suka solusi ini tapi saya tidak melihat bagaimana variabel host digunakan. Tampaknya tidak digunakan dalam panggilan mysql di for for loop.
Matthew Zackschewski
1
Maaf, gagal memasukkannya ke dalam perintah, memperbaruinya.
kfox
5

Jika di linux (atau sistem lain yang mendukung perpipaan, gema dan grep) Anda dapat melakukannya dengan satu baris:

echo "SET FOREIGN_KEY_CHECKS = 0;" > temp.txt; \
mysqldump -u[USER] -p[PASSWORD] --add-drop-table --no-data [DATABASE] | grep ^DROP >> temp.txt; \
echo "SET FOREIGN_KEY_CHECKS = 1;" >> temp.txt; \
mysql -u[USER] -p[PASSWORD] [DATABASE] < temp.txt;

Saya tahu ini adalah pertanyaan lama, tetapi saya pikir metode ini cepat dan sederhana.

moretti.fabio
sumber
2

Dalam php semudah:

$pdo = new PDO('mysql:dbname=YOURDB', 'root', 'root');

$pdo->exec('SET FOREIGN_KEY_CHECKS = 0');

$query = "SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')
          FROM information_schema.tables
          WHERE table_schema = 'YOURDB'";

foreach($pdo->query($query) as $row) {
    $pdo->exec($row[0]);
}

$pdo->exec('SET FOREIGN_KEY_CHECKS = 1');

Hanya ingat untuk mengubah YOURDB ke nama database Anda, dan jelas pengguna / pass.

nsbucky
sumber
2

Dalam shell Linux seperti bash / zsh:

DATABASE_TO_EMPTY="your_db_name";
{ echo "SET FOREIGN_KEY_CHECKS = 0;" ; \
  mysql "$DATABASE_TO_EMPTY" --skip-column-names -e \
  "SELECT concat('DROP TABLE IF EXISTS ', table_name, ';') \
   FROM information_schema.tables WHERE table_schema = '$DATABASE_TO_EMPTY';";\
  } | mysql "$DATABASE_TO_EMPTY"

Ini akan menghasilkan perintah, lalu segera memipakannya ke instance klien ke-2 yang akan menghapus tabel.

Bit pintar tentu saja disalin dari jawaban lain di sini - Saya hanya ingin copy-dan-paste-liner (ish) untuk benar - benar melakukan pekerjaan yang diinginkan OP.

Catatan tentu saja Anda harus memasukkan kredensial Anda dalam (dua kali) dalam perintah mysql ini, kecuali jika Anda memiliki pengaturan keamanan yang sangat rendah. (Atau Anda bisa alias perintah mysql Anda untuk memasukkan kredit Anda.)

artfulrobot
sumber
2

Taruh di sini beberapa komentar berguna yang dibuat oleh Jonathan Watt untuk menjatuhkan semua tabel

MYSQL="mysql -h HOST -u USERNAME -pPASSWORD DB_NAME"
$MYSQL -BNe "show tables" | awk '{print "set foreign_key_checks=0; drop table `" $1 "`;"}' | $MYSQL
unset MYSQL

Ini membantu saya dan saya harap ini bisa bermanfaat

Pavel.Solovyenko
sumber
2

Lepaskan semua tabel dari database dengan satu baris dari baris perintah:

mysqldump -u [user_name] -p[password] -h [host_name] --add-drop-table --no-data [database_name] | grep ^DROP | mysql -u [user_name] -p[password] -h [host_name] [database_name]

Di mana [user_name], [password], [host_name] dan [database_name] harus diganti dengan data nyata (pengguna, kata sandi, nama host, nama database).

Peter Lozovitskiy
sumber
1

Ini adalah posting yang cukup lama, tetapi tidak ada jawaban di sini yang benar-benar menjawab pertanyaan menurut pendapat saya, jadi saya berharap posting saya akan membantu orang!

Saya menemukan solusi ini pada pertanyaan lain yang bekerja sangat baik untuk saya:

mysql -Nse 'show tables' DB_NAME | while read table; do mysql -e "SET FOREIGN_KEY_CHECKS=0; truncate table \`$table\`" DB_NAME; done

Itu benar-benar akan mengosongkan semua tabel Anda di database DB_NAME, dan tidak hanya menampilkan TRUNCATEbaris perintah.

Semoga ini membantu!

mokk
sumber
Berguna tetapi tidak benar-benar menjawab pertanyaan.
jrosell
1

Membangun jawaban oleh @Dion Truter dan @Wade Williams, skrip shell berikut akan menjatuhkan semua tabel, setelah terlebih dahulu menunjukkan apa yang akan dijalankan, dan memberi Anda kesempatan untuk membatalkan menggunakan Ctrl-C.

#!/bin/bash

DB_HOST=xxx
DB_USERNAME=xxx
DB_PASSWORD=xxx
DB_NAME=xxx

CMD="mysql -sN -h ${DB_HOST} -u ${DB_USERNAME} -p${DB_PASSWORD} ${DB_NAME}"

# Generate the drop statements
TMPFILE=/tmp/drop-${RANDOM}.sql
echo 'SET FOREIGN_KEY_CHECKS = 0;' > ${TMPFILE}
${CMD} $@ >> ${TMPFILE} << ENDD
    SELECT concat('DROP TABLE IF EXISTS \`', table_name, '\`;')
    FROM information_schema.tables
    WHERE table_schema = '${DB_NAME}';
ENDD
echo 'SET FOREIGN_KEY_CHECKS = 1;' >> ${TMPFILE}

# Warn what we are about to do
echo
cat ${TMPFILE}
echo
echo "Press ENTER to proceed (or Ctrl-C to abort)."
read

# Run the SQL
echo "Dropping tables..."
${CMD} $@ < ${TMPFILE}
echo "Exit status is ${?}."
rm ${TMPFILE}
Philip Callender
sumber
0

Solusi ini didasarkan pada jawaban @SkyLeach tetapi dengan dukungan menjatuhkan tabel dengan kunci asing.

echo "SET FOREIGN_KEY_CHECKS = 0;" > ./drop_all_tables.sql
mysqldump --add-drop-table --no-data -u user -p dbname | grep 'DROP TABLE' >> ./drop_all_tables.sql
echo "SET FOREIGN_KEY_CHECKS = 1;" >> ./drop_all_tables.sql
mysql -u user -p dbname < ./drop_all_tables.sql
pgmank
sumber
0
DB="your database name" \
    && mysql $DB < "SET FOREIGN_KEY_CHECKS=0" \
    && mysqldump --add-drop-table --no-data $DB | grep 'DROP TABLE' | grep -Ev "^$" | mysql $DB \
    && mysql $DB < "SET FOREIGN_KEY_CHECKS=1"
Ernestas Stankevičius
sumber
0

Sederhana dan jelas (mungkin).

Mungkin bukan solusi yang bagus, tetapi ini berhasil dan menyelamatkan hari saya.

Bekerja untuk versi Server: 5.6.38 MySQL Community Server (GPL)

Langkah-langkah yang saya ikuti:

 1. generate drop query using concat and group_concat.
 2. use database
 3. disable key constraint check
 4. copy the query generated from step 1
 5. enable key constraint check
 6. run show table

Shell MySQL

mysql> SYSTEM CLEAR;
mysql> SELECT CONCAT('DROP TABLE IF EXISTS `', GROUP_CONCAT(table_name SEPARATOR '`, `'), '`;') AS dropquery FROM information_schema.tables WHERE table_schema = 'emall_duplicate';
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| dropquery                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`; |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> USE emall_duplicate;
Database changed
mysql> SET FOREIGN_KEY_CHECKS = 0;                                                                                                                                                   Query OK, 0 rows affected (0.00 sec)

// copy and paste generated query from step 1
mysql> DROP TABLE IF EXISTS `admin`, `app`, `app_meta_settings`, `commission`, `commission_history`, `coupon`, `email_templates`, `infopages`, `invoice`, `m_pc_xref`, `member`, `merchant`, `message_templates`, `mnotification`, `mshipping_address`, `notification`, `order`, `orderdetail`, `pattributes`, `pbrand`, `pcategory`, `permissions`, `pfeatures`, `pimage`, `preport`, `product`, `product_review`, `pspecification`, `ptechnical_specification`, `pwishlist`, `role_perms`, `roles`, `settings`, `test`, `testanother`, `user_perms`, `user_roles`, `users`, `wishlist`;
Query OK, 0 rows affected (0.18 sec)

mysql> SET FOREIGN_KEY_CHECKS = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW tables;
Empty set (0.01 sec)

mysql> 

masukkan deskripsi gambar di sini

Sanjay
sumber
-1

Saya menggunakan yang berikut ini dengan server MSSQL:

if (DB_NAME() = 'YOUR_DATABASE') 
begin
    while(exists(select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE='FOREIGN KEY'))
    begin
         declare @sql nvarchar(2000)
         SELECT TOP 1 @sql=('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']')
         FROM information_schema.table_constraints
         WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
         exec (@sql)
         PRINT @sql
    end

    while(exists(select 1 from INFORMATION_SCHEMA.TABLES))
    begin
         declare @sql2 nvarchar(2000)
         SELECT TOP 1 @sql2=('DROP TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME + ']')
         FROM INFORMATION_SCHEMA.TABLES
        exec (@sql2)
        PRINT @sql2
    end
end
else
    print('Only run this script on the development server!!!!')

Ganti YOUR_DATABASE dengan nama database Anda atau hapus seluruh pernyataan IF (Saya suka keamanan tambahan).

Christiaan Maks
sumber
-7

Solusi terbaik untuk saya sejauh ini

Pilih Database -> Klik Kanan -> Tugas -> Buat Skrip - akan membuka panduan untuk membuat skrip. Setelah memilih objek dalam opsi Scripting yang ditetapkan, klik Tombol Lanjut . Di bawah "Script DROP and CREATE" pilih Script DROP .

Jalankan skrip.

azza idz
sumber
Itu hampir berhasil tetapi saya mengklik tombol hijau sebelum tombol biru dan saya mendapat kotak di sebelah kiri dan saya mengklik membatalkan tetapi kemudian saya minum kopi saya dan melupakannya.
Rolf
Bisakah Anda menjelaskan di mana Anda mengklik? Apakah ada alat yang terlibat untuk ini?
Nico Haase