외래 키를 무시하고 MySQL DROP 모든 테이블


403

거기에있을 수있는 외래 키 제약 조건을 무시하고 MySQL 데이터베이스에서 모든 테이블을 삭제하는 좋은 방법이 있습니까?


1
다른 엔터티가 많지 않으면 DROP DATABASE 만 시작하고 처음부터 시작하지 않는 이유는 무엇입니까?
StuartLC

161
사용자 권한을 유지합니다.
bcmcfc

5
그 동안 Dion Truter가 내 것보다 더 완전한 답변을 얻었으며 대신 수락하도록 제안했습니다. ( " 모든 테이블 삭제 "부분은 내 것이 아닙니다)
chiccodoro

5
참고 phpMyAdmin이 설치되어 있으면 모든 테이블을 쉽게 선택하고 삭제할 수 있습니다.
사용자

1
사실이지만 버전 4.x의 phpMyAdmin에만 해당됩니다. 모든 테이블을 선택 Drop하고 드롭 다운 메뉴에서 선택하면 Foreign key check확인란 을 선택 취소 할 수 있습니다 .
jmarceli

답변:


474

생성 된 drop 문 집합이 유용하다는 것을 알았고 다음과 같은 조정을 권장합니다.

  1. 다음과 같이 생성 된 방울을 데이터베이스로 제한하십시오.
SELECT concat('DROP TABLE IF EXISTS `', table_name, '`;')
FROM information_schema.tables
WHERE table_schema = 'MyDatabaseName';

참고 1 : 이것은 DROP 문을 실행하지 않고 단지 목록을 제공합니다. 출력을 잘라내어 SQL 엔진에 붙여 넣어 실행해야합니다.

참고 2 : VIEW가있는 경우 각 DROP TABLE `VIEW_NAME`명령문을 DROP VIEW `VIEW_NAME`수동으로 수정 해야합니다.

  1. http://dev.mysql.com/doc/refman/5.5/en/drop-table.html 에 따라 계단식으로 삭제하는 것은 의미가 없으며 오해의 소지가 있습니다.

"RESTRICT와 CASCADE는 포팅을보다 쉽게 ​​만들어줍니다. MySQL 5.5에서는 아무 것도하지 않습니다."

따라서 필요한 경우 drop 문이 작동하려면 다음을 수행하십시오.

SET FOREIGN_KEY_CHECKS = 0

이렇게하면 참조 무결성 검사가 비활성화됩니다. 따라서 필요한 드롭 수행이 완료되면 키 검사를 재설정해야합니다.

SET FOREIGN_KEY_CHECKS = 1
  1. 최종 실행은 다음과 같아야합니다.
SET FOREIGN_KEY_CHECKS = 0;
-- Your semicolon separated list of DROP statements here
SET FOREIGN_KEY_CHECKS = 1;

NB : SELECT의 출력을 더 쉽게 사용하려면 mysql -B 옵션이 도움이 될 수 있습니다.


6
@ Timmm : 대답에 3 방울을 썼습니다. 그러나 이것도 실행하지 않습니다. Stackoverflow에서 복사하여 MySQL Workbench 또는 다른 곳에 붙여 넣어야합니다. 위의 선택으로 모든 일치하는 상품이 "무료"로 제공됩니다. 복사하여 붙여 넣기 만하면됩니다.
chiccodoro

3
예, 알고 있지만 스크립트에서 사용하고 싶었습니다. 내가 실제로 한 일은입니다 DROP DATABASE foo; CREATE DATABASE foo;. 이는 똑같지는 않지만 나를 위해 일했습니다.
Timmmm

2
수백 개의 테이블이있을 때는 편리하지 않지만 데이터베이스를 다시 작성하는 것이 옵션이 아닌 경우에는없는 것보다 낫습니다.
Nicolas Raoul

2
@Timmmm : 다시 한 번 살펴보십시오. 정답입니다. 질문에 완전히 대답하지는 않습니다. Jean의 대답은 유망한 것으로 보입니다. 이전과 후에 SET FOREIGN_KEY_CHECKS를 올바르게 적용하면서 DROP 문을 자동 생성하고 실행합니다.
chiccodoro

1
당신이 리눅스 나 맥에있는 경우 터미널을 사용하고 당신의 MySQL의 계정 유형에 로그인에 작동한다 : mysql -u <사용자 이름> -p 다음 지금 당신에게 암호를 선택 데이터베이스를 입력 삭제 테이블 위의 코드를 작성 Enter 키를 누르십시오
ismnoiet

132

에서 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;

(주이 자동으로 기존의 모든 테이블에 대한 드롭 테이블 문을 생성하는 방법에 답하고 하나의 스크립트를 실행하지 않는 방법을 사용하지 않도록 외래 키 검사에 임의의 순서로 테이블을 드롭 할 수 있도록하기 위해..이 답변 진의 대답을 그렇습니다.)


10
MySQL Workbench를 사용하는 경우 왼쪽 열에서 모든 테이블을 선택하고 마우스 오른쪽 단추를 클릭 한 다음 '테이블 삭제'옵션을 사용하여 모든 테이블 이름을 입력하지 않아도됩니다. IT는 SET FOREGIN_KEY_CHECKS 문 사이에서 복사하여 붙여 넣을 수있는 SQL을 생성합니다. 아마도 다른 GUI에서도 유사합니다.
chris

감사합니다. @chris 매우 도움이 되었으면 답변을 추가해야합니다.
Andrew

97

외래 키를 무시하도록 SurlyDre의 저장 프로 시저가 수정되었습니다.

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
테이블에서 작동하며 뷰를 삭제하지 못합니다. 여전히 타이핑을 크게 줄였습니다 :) thx.
chrisinmtown

7 년 후 나는 당신이 _tableName역 따옴표로 감싸 야한다고 말하고 싶습니다 . 그렇지 않으면 일부 테이블 group또는 다른 키워드 에서 실패 합니다.
sashaaero

뷰를 잘 관리하십시오! information_schema.TABLES에서 table_name을 선택하십시오. table_schema = SCHEMA () AND table_type = "BASE TABLE";
laurent belloeil

42

위의 모든 접근 방식에는이 AFAICT보다 훨씬 많은 작업이 포함됩니다 ...

( 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
왜 그냥 파이프 mysqldumpmysql파일을 거치지 않고,?
Rolf

2
@Rolf 특별한 이유가 없습니다. 몸을 녹여
SkyLeach

2
고마워, 나는 이미했고, 괄호를 제거하고 mysqldumpgrep삽입 mysql했다. 솔루션에 다시 한 번 감사드립니다. 좋습니다.
Rolf

5
외래 키 제약 조건이 없습니다. 나는 당신의 답변에 따라 여기에 bash는 스크립트를 추가 한 : gist.github.com/cweinberger/c3f2882f42db8bef9e605f094392468f
cweinberger

똑똑한 sooooooooooooo!
zx1986

25

에서 이 답변 ,

실행 :

  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;

현재 사용중인 데이터베이스에서 테이블이 삭제됩니다. 를 사용하여 현재 데이터베이스를 설정할 수 있습니다 use.


그렇지 않으면 Dion의 허용 된 대답은 더 간단합니다. 먼저 쿼리를 얻기 위해 두 번 실행하고 쿼리를 실행하려면 두 번째로 실행해야합니다. db 및 테이블 이름의 특수 문자를 피하기 위해 바보 같은 백틱을 제공했습니다.

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

짧고 깨끗한 솔루션. 절차 대안보다 낫습니다.
라파엘 레난 파 체코

16

커서 기반 솔루션은 다음과 같습니다. 오래 걸리지 만 단일 SQL 배치로 작동합니다.

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
좋지만 불행히도 외래 키를 처리하지는 않습니다.
Timmmm

11

넌 할 수있어:

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

그런 다음 생성 된 쿼리를 실행하십시오. 현재 데이터베이스에서 모든 단일 테이블을 삭제합니다.

다음drop table명령에 대한 도움말입니다 .


위의 대답은 ||연결 연산자로 설정되어 있다고 가정합니다 . 보다 구체적으로, MySQL SQL 모드는를 포함 PIPES_AS_CONCAT합니다. 참조 : dev.mysql.com/doc/refman/5.0/en/…
Ionuț G. Stan

@Ionut : 멋지다! 지적 해 주셔서 감사합니다. 사용하는 코드 샘플 고정 concat대신||
파블로 산타 크루즈

9

Dion Truter의 답변 에서이 수정 사항을 생각해내어 많은 테이블을 쉽게 만들 수 있습니다.

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

전체 항목을 한 필드에 반환하므로 한 번 복사하고 모든 테이블을 삭제할 수 있습니다 ( Copy Field Content (unquoted)워크 벤치에서 사용 ). 테이블이 많으면에 제한이있을 수 있습니다 GROUP_CONCAT(). 그렇다면 max len 변수를 늘리십시오 ( max_allowed_packet필요한 경우).


SET GROUP_CONCAT_MAX_LEN이 필요한 트릭이었습니다. 나는 작동하는 스크립트를 가지고 있었지만 항상 잘린 테이블 이름으로 처음에는 실패했으며 두 번째로 실행할 때 성공적으로 완료되었습니다. 감사!
dualmon

8

주제에 대한 인터넷 검색은 항상이 SO 질문으로 이어 지므로 두 테이블과 뷰를 모두 삭제하는 mysql 코드가 작동합니다.

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

주어진 데이터베이스에서 모든 테이블을 삭제하는 하나의 라이너 :

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

이를 실행하면 DATABASE_NAME 데이터베이스에서 모든 테이블이 삭제됩니다.

그리고 이것에 대한 좋은 점은 데이터베이스 이름이 명시 적으로 한 번만 쓰여진다는 것입니다.


1
이것은 나를 위해 일했지만 macOS High Sierra에서 -i를 -I로 대체해야했습니다.
Ali Selcuk

1
감사합니다 @AliSelcuk. -i와 -I 모두 우분투에서 작동하므로 macOS에서도 작동하도록 -I로 변경합니다.
mgershen

1
매우 유용합니다, 감사합니다! -pPASSWORD (-p와 PASSWORD 사이에 공백이 없음)를 사용하여 두 mysql 명령 모두에 암호를 전달해야했습니다.
Mike

6

다음은 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

이 솔루션을 정말 좋아하지만 호스트 변수가 어떻게 사용되는지 모르겠습니다. for 루프에서 mysql 호출에 사용되지 않는 것 같습니다.
Matthew Zackschewski

1
명령에 넣지 못해서 업데이트했습니다.
kfox

5

리눅스 (또는 파이핑, 에코 및 grep를 지원하는 다른 시스템)에서 한 줄로 할 수 있습니다.

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;

나는 이것이 오래된 질문이라는 것을 알고 있지만이 방법은 빠르고 간단하다고 생각합니다.


2

PHP에서는 다음과 같이 쉽습니다.

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

YOURDB를 데이터베이스 이름과 사용자 / 패스로 변경해야합니다.


2

bash / zsh와 같은 Linux 쉘에서 :

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"

그러면 명령이 생성 된 다음 즉시 두 번째 클라이언트 인스턴스로 파이프되어 테이블을 삭제합니다.

영리한 비트는 물론 여기에서 다른 답변에서 복사됩니다. 실제로 OP를 원했던 작업을 수행 하기 위해 복사하여 붙여 넣을 수있는 1 라이너 (ish)가 필요 했습니다.

당신이 매우 낮은 보안 설정이없는 경우도이 MySQL의 명령에 (2 회)에 자격 증명을 넣어해야합니다 물론. (또는 creds를 포함하도록 mysql 명령의 별명을 지정할 수 있습니다.)


2

모든 테이블을 삭제하기 위해 Jonathan Watt작성한 유용한 주석을 여기에 넣으십시오.

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

도움이 되었으면 좋겠습니다.


2

명령 행에서 한 줄로 데이터베이스에서 모든 테이블을 삭제하십시오.

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]

여기서 [user_name], [password], [host_name] 및 [database_name]은 실제 데이터 (사용자, 비밀번호, 호스트 이름, 데이터베이스 이름)로 바꿔야합니다.


1

이것은 꽤 오래된 게시물이지만 여기에 대한 답변 중 실제로 내 의견으로는 질문에 대한 답변이 없으므로 내 게시물이 사람들을 도울 수 있기를 바랍니다.

나에게 정말 잘 맞는 다른 질문 에서이 솔루션을 찾았습니다.

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

실제로 데이터베이스의 모든 테이블을 비우고 DB_NAME표시 할뿐만 아니라TRUNCATE 명령 줄만 됩니다.

도움이 되었기를 바랍니다!


유용하지만 실제로 질문에 대답하지는 않습니다.
jrosell

1

@Dion Truter와 @Wade Williams의 답변을 바탕으로 다음 셸 스크립트는 실행 예정을 표시하고 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}

0

이 솔루션은 @SkyLeach 답변을 기반으로하지만 외래 키로 테이블을 삭제하는 기능을 지원합니다.

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

간단하고 명확합니다.

멋진 해결책은 아니지만 이것이 효과가 있었고 하루를 구했습니다.

서버 버전에서 작동 함 : 5.6.38 MySQL 커뮤니티 서버 (GPL)

내가 따르는 단계 :

 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 쉘

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> 

여기에 이미지 설명을 입력하십시오


-1

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

YOUR_DATABASE를 데이터베이스 이름으로 바꾸거나 전체 IF 문을 제거하십시오 (추가 안전이 마음에 듭니다).


-7

최고의 솔루션지금까지 적합한

데이터베이스-> 마우스 오른쪽 단추-> 작업-> 스크립트 생성을 선택 하십시오-스크립트 생성을 위한 마법사가 열립니다. 스크립팅 옵션 설정에서 오브젝트를 선택한 후 고급 단추를 클릭하십시오 . "Script DROP and CREATE" 아래 에서 Script DROP을 선택하십시오 .

스크립트를 실행하십시오.


그것은 거의 효과가 있었지만 파란색 버튼 전에 녹색 버튼을 클릭했고 왼쪽에 상자가 있었고 취소를 클릭했지만 커피를 마셨고 잊어 버렸습니다.
Rolf

어디를 클릭했는지 설명해 주시겠습니까? 이와 관련된 도구가 있습니까?
Nico Haase
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.