MySQL DROP tüm tabloları, yabancı anahtarları yok sayarak


403

Orada olabilecek herhangi bir yabancı anahtar kısıtlamasını göz ardı ederek tüm tabloları bir MySQL veritabanından bırakmanın kolay ve kolay bir yolu var mı?


1
Çok fazla başka varlığınız yoksa, neden sadece VERİTABANI DROP ve sıfırdan başlamıyorsunuz?
StuartLC

161
Kullanıcı ayrıcalıklarını korumak için.
bcmcfc

5
Bu arada Dion Truter'ın benimkinden daha eksiksiz bir cevap aldığını ve bunun yerine kabul etmeyi önerdiğini fark ettim. (" tüm masaları bırak " kısmı benimkinin kapsamında değildir)
chiccodoro

5
Eğer phpMyAdmin'in kurulu olması durumunda tüm tabloları seçmek ve bırakmak kolaydır.
Kullanıcı

1
Bu doğrudur, ancak 4.x sürümünde sadece phpMyAdmin içindir. Tüm tabloları seçip Dropaçılır menüden seçim yaparsanız onay Foreign key checkkutusunun işaretini kaldırabilirsiniz .
jmarceli

Yanıtlar:


474

Oluşturulan bırak deyimleri kümesi yararlı buldum ve bu tweaks öneririz:

  1. Oluşturulan damlaları veritabanınızla şu şekilde sınırlandırın:
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

Not 1: Bu DROP deyimlerini yürütmez, sadece bunların bir listesini verir. Çalıştırmak için çıktıyı kesip SQL motorunuza yapıştırmanız gerekir.

Not 2: GÖRÜNÜMleriniz varsa, her bir DROP TABLE `VIEW_NAME`ifadeyi DROP VIEW `VIEW_NAME`manuel olarak düzeltmeniz gerekir.

  1. Http://dev.mysql.com/doc/refman/5.5/en/drop-table.html uyarınca , kaskadla bırakmanın anlamsız / yanıltıcı olduğunu unutmayın:

"RESTRICT ve CASCADE'in taşımayı kolaylaştırmasına izin verilmektedir. MySQL 5.5'te hiçbir şey yapmıyorlar."

Bu nedenle, gerekiyorsa drop ifadelerinin çalışması için:

SET FOREIGN_KEY_CHECKS = 0

Bu, referans bütünlük kontrollerini devre dışı bırakacaktır - bu nedenle, ihtiyacınız olan damlaları gerçekleştirmeyi bitirdiğinizde, tuş kontrolünü

SET FOREIGN_KEY_CHECKS = 1
  1. Son yürütme şöyle görünmelidir:
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;

Not: SELECT çıktısını daha kolay kullanmak için mysql -B seçeneği yardımcı olabilir.


6
@Timmm: Cevabımda 3 damla yazdım - ancak bu da onları yürütmez. Bunları Stackoverflow'dan kopyalamanız ve MySQL Workbench'inize veya herhangi bir yere yapıştırmanız gerekir. Yukarıdaki seçim ile eşleşen tüm damla "ücretsiz" elde. Onları kopyalayıp yapıştırmanız yeterlidir.
chiccodoro

3
Evet biliyorum, ama bir senaryoda kullanmak istedim. Aslında yaptığım şey DROP DATABASE foo; CREATE DATABASE foo;, aynı değil ama benim için çalıştı.
Timmmm

2
Yüzlerce tablo olduğunda uygun değil, ancak veritabanını yeniden oluşturmak bir seçenek değilse hiçbir şeyden daha iyi.
Nicolas Raoul

2
@Timmmm: Buna tekrar bakmak - haklısın, soruyu tam olarak cevaplamıyor. Jean'in cevabı ümit verici görünüyor - hem DROP ifadelerini otomatik olarak oluşturur hem de yürütür, SET FOREIGN_KEY_CHECKS'i önce ve sonra düzgün bir şekilde uygular.
chiccodoro

1
Eğer linux veya mac iseniz terminali kullanın ve mysql hesap türüne giriş yapmak için çalışacaktır: mysql -u <kullanıcı adı> -p sonra şimdi enter tuşuna basın size şifre seçin veritabanını girin ve tabloları silmek için yukarıdaki kodu yazın
ismnoiet

132

Gönderen 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;

(Bunun, tabloları rasgele sırayla bırakabilmek için yabancı anahtar kontrollerinin nasıl devre dışı bırakılacağını yanıtladığını unutmayın. Varolan tüm tablolar için otomatik olarak açılan tablo ifadelerinin nasıl oluşturulacağı ve tek bir komut dosyasında nasıl yürütüleceği yanıtlanmaz. yapar.)


10
MySQL Workbench kullanıyorsanız, sol sütundaki tüm tabloları seçip sağ tıklatıp 'bırak tablolar' seçeneğini seçerek tüm tablo adlarını yazmaktan kaçınabilirsiniz. IT, SET FOREGIN_KEY_CHECKS deyimleri arasında kopyalayıp yapıştırabileceğiniz SQL'i oluşturur - muhtemelen diğer GUI'lerde de benzerdir.
chris

teşekkürler yararlı ve @chris süper yararlı, bir cevap eklemelisiniz
Andrew

97

SurlyDre'nin saklı yordamı, yabancı anahtarların yok sayılması için değiştirildi:

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

2
Tablolarda çalışır, görünümleri silemez. Hala benim yazarak büyük ölçüde azaldı :) thx.
chrisinmtown

7 yıl sonra _tableNamebir backquotes ile sarmanız gerektiğini söyleyebilirim . Aksi takdirde, bazı tablolarda groupveya diğer anahtar kelimelerde başarısız olur .
sashaaero

Görüşlere dikkat et! Table_name FROM information_schema.TABLES NEREDE table_schema = SCHEMA () AND table_type = "BASE TABLE";
laurent belloeil

42

Yukarıdaki her yaklaşım, bu AFAICT'den çok daha fazla iş içerir ...

( 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

2
neden sadece boru mysqldumpiçin mysqlbir dosya geçmeden,?
Rolf

2
@ Belirli bir sebep yok. Kendinizi nakavt edin.
SkyLeach

2
Teşekkürler, zaten yaptım, parantezleri çıkardım ve mysqldumpiçine grepgirdim mysql, işe yarıyor. Çözümünüz için tekrar teşekkürler, iyi.
Rolf

5
Bu yabancı anahtar kısıtlamalarını kaçırıyor; Buraya cevabınıza dayanarak bir bash betiği ekledim: gist.github.com/cweinberger/c3f2882f42db8bef9e605f094392468f
cweinberger

sooooooooooooo akıllı!
zx1986

25

Gönderen bu cevap ,

yürütün:

  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;

Bu, şu anda kullanımda olan veritabanından tabloları bırakır. Mevcut veritabanını kullanarak ayarlayabilirsiniz use.


Aksi takdirde, Dion'un kabul edilen cevabı daha basittir, ancak önce sorguyu almak için iki kez, ardından sorguyu yürütmek için iki kez yürütmeniz gerekir. Ben db ve tablo adlarında özel karakter kaçmak için bazı aptal geri keneler sağladı.

  SELECT CONCAT('DROP TABLE IF EXISTS `', table_schema, '`.`', table_name, '`;')
  FROM   information_schema.tables
  WHERE  table_schema = 'dbName'; --your db name here

Kısa ve temiz bir çözüm. Prosedür alternatifinden çok daha iyi.
Rafael Renan Pacheco

16

İşte imleç tabanlı bir çözüm. Tür uzun ama tek bir SQL toplu iş olarak çalışır:

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

2
Güzel, ama ne yazık ki yabancı anahtarları ele almaz.
Timmmm

11

Yapabilirsin:

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

Sonra oluşturulan sorguları çalıştırın. Geçerli veritabanındaki tüm tabloları bırakırlar.

İştedrop table komutla ilgili bazı yardım .


Yukarıdaki yanıt ||, birleştirme operatörü olarak ayarlandığını varsayar . Daha spesifik olarak, MySQL SQL modu içerir PIPES_AS_CONCAT. Referans: dev.mysql.com/doc/refman/5.0/en/…
Ionuț G. Stan

@Ionut: havalı! işaret ettiğin için teşekkürler. Kod örneğinin concatyerine kullanılması düzeltildi||
Pablo Santa Cruz

9

Dion Truter'ın cevabında, birçok tabloyla kolaylaştırmak için bu modifikasyonu buldum:

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

Bu, her şeyi bir alanda döndürür, böylece bir kez kopyalayıp tüm tabloları silebilirsiniz ( Copy Field Content (unquoted)Workbench'te kullanın ). Çok fazla masanız varsa, bazı sınırlara vurabilirsiniz GROUP_CONCAT(). Eğer öyleyse, maksimum uzunluk değişkenini artırın (ve max_allowed_packetgerekirse).


SET GROUP_CONCAT_MAX_LEN ihtiyacım olan numaraydı. Çalışmakta olan bir komut dosyası vardı, ancak her zaman kesilmiş tablo adıyla ilk kez başarısız oldum ve daha sonra ikinci kez çalıştırıldığında başarıyla bitti. Teşekkürler!
dualmon

8

Konu üzerinde googling her zaman beni bu SO soru getiriyor yani burada hem tablolar ve görünümleri silen mysql kodu çalışıyor:

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

7

Belirli bir veritabanındaki tüm tabloları bırakmak için tek bir astar:

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

Bunu çalıştırmak DATABASE_NAME veritabanındaki tüm tabloları bırakacaktır.

Bu konuda güzel bir şey, veritabanı adının sadece bir kez açıkça yazılmasıdır.


1
Bu ben MacOS High Sierra üzerinde -I -i yerine zorunda benim için çalıştı, ama
Ali Selçuk

1
Teşekkürler @AliSelcuk. Hem -i hem de -I benim için Ubuntu'da çalışıyor, bu yüzden macOS için de çalışması için bunu -I olarak değiştireceğim.
mgershen

1
Çok faydalı, teşekkürler! Her iki mysql komutuna -pPASSWORD (-p ve PASSWORD arasında boşluk yok) kullanarak bir parola geçirmek zorunda kaldım
Mike

6

İşte bunu bir bash betiği ile yapmanın otomatik bir yolu:

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

Gerçekten bu çözüm gibi ama host değişkeninin nasıl kullanıldığını görmüyorum. For döngüsünde herhangi bir mysql çağrısında kullanılmıyor gibi görünüyor.
Matthew Zackschewski

1
Maalesef, komuta koymayı özledim, güncelledi.
kfox

5

Linux'ta (veya boru, yankı ve grep'i destekleyen herhangi bir sistemde) bir satırla yapabilirsiniz:

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;

Bunun eski bir soru olduğunu biliyorum, ama bence bu yöntem hızlı ve basit.


2

Php olarak bu kadar kolay:

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

Sadece YOURDB veri tabanı ve açıkçası kullanıcı / pass adını değiştirmeyi unutmayın.


2

Bash / zsh gibi bir Linux kabuğunda:

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"

Bu komutları oluşturur ve hemen bunları tabloları silen 2. bir istemci örneğine bağlar.

Zeki bit elbette burada diğer cevaplardan kopyalanıyor - OP'nin gerçekten istediği işi yapmak için sadece kopyalanabilir ve yapıştırılabilir bir astar (ish) istedim.

Not Eğer çok düşük bir güvenlik ayarı yoksa da, bu mysql komutları içinde (iki kez) kimlik bilgilerinizi koymak gerekecek tabii. (veya mysql komutunuzu kredilerinizi içerecek şekilde diğer adınıza ekleyebilirsiniz)



2

Tüm tabloları komut satırından tek bir satırla veritabanından bırakın:

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]

Burada [kullanıcı_adı], [parola], [ana makine_adı] ve [veritabanı_adı] yerine gerçek bir veri (kullanıcı, parola, ana bilgisayar adı, veritabanı adı) koymak gerekir.


1

Bu oldukça eski bir yazı, ama buradaki cevapların hiçbiri gerçekten benim düşünceme göre soruyu cevaplamadı, bu yüzden umarım yazım insanlara yardımcı olacaktır!

Bu çözümü benim için gerçekten iyi çalışan başka bir soruda buldum:

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

Bu aslında veritabanındaki tüm tablolarınızı boşaltır DB_NAMEve yalnızca TRUNCATEkomut satırını görüntülemez.

Bu yardımcı olur umarım!


Yararlı ama soruya gerçekten cevap vermiyor.
jrosell

1

@Dion Truter ve @Wade Williams'ın cevabına dayanarak, aşağıdaki kabuk betiği, ilk önce çalıştırılmak üzere olanı gösterdikten ve Ctrl-C'yi kullanarak iptal etme şansı verdikten sonra tüm tabloları bırakacaktır.

#!/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}

0

Bu çözüm @SkyLeach cevabına dayanmaktadır, ancak yabancı anahtarlı tabloları bırakma desteğiyle.

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

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"

0

Basit ve açık (olabilir).

Süslü bir çözüm olmayabilir, ama bu bana çalıştı ve günümü kurtardı.

Sunucu sürümü için çalıştı: 5.6.38 MySQL Topluluk Sunucusu (GPL)

İzlediğim adımlar:

 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

MySQL kabuğu

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> 

resim açıklamasını buraya girin


-1

MSSQL sunucusuyla aşağıdakileri kullanıyorum:

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!!!!')

YOUR_DATABASE veritabanınızın adıyla değiştirin veya tüm IF deyimini kaldırın (Ek güvenliği seviyorum).


-7

En iyi çözümBenim için

Seç Veritabanı -> Sağ Tıkla -> Görevler -> kodları oluştur - komut dosyalarını oluşturmak için sihirbaz açılacaktır. Komut Dosyası ayarında nesneleri seçtikten sonra Gelişmiş Düğmesine tıklayın . Altında "Senaryo Bırakma ve CREATE" seçeneğini Senaryo DAMLA .

Komut dosyasını çalıştırın.


Neredeyse işe yaradı ama mavi düğmeden önce yeşil düğmeye tıkladım ve sola bir kutu aldım ve iptal'i tıkladım ama sonra kahvemi içtim ve unuttum.
Rolf

Nereye tıkladığınızı bile açıklayabilir misiniz? Bunun için herhangi bir araç var mı?
Nico Haase
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.