DROP 데이터베이스 권한없이 명령 행에서 모든 MySQL 테이블을 제거하는 방법은 무엇입니까? [복제]
이 질문에는 이미 답변이 있습니다.
명령 프롬프트를 사용하여 Windows MySQL에서 모든 테이블을 삭제하려면 어떻게합니까? 내가하고 싶은 이유는 사용자가 데이터베이스 삭제에 액세스 할 수는 있지만 데이터베이스 자체를 다시 만들 수는 없기 때문에 수동으로 테이블을 삭제해야하기 때문입니다. 한 번에 모든 테이블을 삭제하는 방법이 있습니까? 대부분의 테이블은 외래 키와 연결되어 있으므로 특정 순서로 삭제해야합니다.
DROP TABLE t1, t2, t3, ...
다음과 같은 명령문을 생성 한 다음 준비된 명령문을 사용하여 실행할 수 있습니다.
SET FOREIGN_KEY_CHECKS = 0;
SET @tables = NULL;
SELECT GROUP_CONCAT(table_schema, '.', table_name) INTO @tables
FROM information_schema.tables
WHERE table_schema = 'database_name'; -- specify DB name here.
SET @tables = CONCAT('DROP TABLE ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
@Devart의 버전은 정확하지만 오류가 발생하지 않도록 개선되었습니다. @Devart의 답변을 편집했지만 수락되지 않았습니다.
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @tables = NULL;
SELECT GROUP_CONCAT('`', table_name, '`') INTO @tables
FROM information_schema.tables
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@tables,'dummy') INTO @tables;
SET @tables = CONCAT('DROP TABLE IF EXISTS ', @tables);
PREPARE stmt FROM @tables;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
존재하지 않는 하나 이상의 "더미"테이블을 추가하여 데이터베이스의 모든 테이블을 이미 삭제 한 경우이 스크립트는 NULL 결과로 오류를 발생시키지 않습니다.
그리고 테이블이 많은 경우에 수정되었습니다.
그리고 모든 뷰를 삭제하는이 작은 변화는 데이터베이스에 존재합니다.
SET FOREIGN_KEY_CHECKS = 0;
SET GROUP_CONCAT_MAX_LEN=32768;
SET @views = NULL;
SELECT GROUP_CONCAT('`', TABLE_NAME, '`') INTO @views
FROM information_schema.views
WHERE table_schema = (SELECT DATABASE());
SELECT IFNULL(@views,'dummy') INTO @views;
SET @views = CONCAT('DROP VIEW IF EXISTS ', @views);
PREPARE stmt FROM @views;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;
삭제하려는 데이터베이스에서 스크립트를 실행한다고 가정합니다. 또는 전에 이것을 실행하십시오.
USE REPLACE_WITH_DATABASE_NAME_YOU_WANT_TO_DELETE;
백틱 문제를 발견 한 Steve Horvath에게 감사합니다.
이 시도.
제약 조건이있는 테이블 (외부 키 관계)에서도 작동합니다. 또는 데이터베이스를 삭제하고 다시 만들 수 있지만 필요한 권한이 없을 수도 있습니다.
mysqldump -u[USERNAME] -p[PASSWORD] \
--add-drop-table --no-data [DATABASE] | \
grep -e '^DROP \| FOREIGN_KEY_CHECKS' | \
mysql -u[USERNAME] -p[PASSWORD] [DATABASE]
In order to overcome foreign key check effects, add show table
at the end of the generated script and run many times until the show table
command results in an empty set.
You can drop the database
and then recreate it with the below:-
mysql> drop database [database name];
mysql> create database [database name];
The accepted answer does not work for databases that have large numbers of tables, e.g. Drupal databases. Instead, see the script here: https://stackoverflow.com/a/12917793/1507877 which does work on MySQL 5.5. CAUTION: Around line 11, there is a "WHERE table_schema = SCHEMA();" This should instead be "WHERE table_schema = 'INSERT NAME OF DB INTO WHICH IMPORT WILL OCCUR';"
'Programing' 카테고리의 다른 글
기본 FirebaseApp이 초기화되지 않았습니다 (0) | 2020.04.29 |
---|---|
정기적으로 어떤 Xcode 키보드 단축키를 사용하십니까? (0) | 2020.04.29 |
PostgreSQL에서 인덱스가있는 열 나열 (0) | 2020.04.29 |
Swift에서 pull을 사용하여 새로 고치는 방법은 무엇입니까? (0) | 2020.04.29 |
-XAllowAmbiguousTypes는 언제 적절한가요? (0) | 2020.04.29 |