2009-09-21 1 views
1

t1, t2를 유지하고 다른 모든 테이블을 삭제하려고합니다."drop table t1, b2"를 구현하는 MySQL 명령이 있습니까?

+0

데이터베이스 자체는 제외하고 모든 테이블을 삭제하려는 경우이를 위해 무엇을 사용합니까? 같은 트릭을 사용하지만이 것들은 제외하십시오 ... –

+0

@Workshop Alex, 죄송합니다. – omg

+0

일반적으로 모든 테이블을 삭제하려면 데이터베이스를 삭제하면됩니다. (이렇게하면 저장 프로 시저와 뷰가 무효화 될 수 있습니다.) 테이블 만 삭제하려면 하나씩 삭제해야합니다. 이 둘 이외의 모든 것을 삭제하려면 하나씩 삭제해야하지만 남아 있어야하는 삭제는 건너 뛰십시오. –

답변

6

information_schema을 사용하여 테이블 이름을 찾고 결과를 DROP 문장의 묶음으로 포맷 할 수 있습니다.

SELECT CONCAT('DROP TABLE ', TABLE_NAME, '; ') 
    FROM information_schema.tables 
    WHERE table_schema = DATABASE() AND table_name NOT IN ('foo', 'bar', 'baz'); 

합니다 (DATABASE() 기능은 현재 use 'D 데이터베이스를 반환합니다.)

가 저장 쓰기, 당신도, 복사를 & 붙여 넣기를 피할 수 PREPAREEXECUTE를 사용하고 (나중에 MySQL은 5.0.13과) 이것을하기위한 절차.

+0

이것은 내가 의미했던 것입니다. :-) 또는 이와 비슷한 것. –

+1

라이브 코드에이 코드를 넣을 때 매우주의해야합니다. 테이블을 삭제하는 것은 일반적으로 코딩해야하는 작업이 아니라 dbadmin 또는 cron/control 작업입니다. 그렇지 않으면 나중에 테이블을 삭제할 수있는 권리가 XSS에 취약한 라이브 코드에 절대로 제공되어서는 안됩니다. –

1

mysqldump를 사용하여 DROP TABLE 문의 목록을 생성하고 원하지 않는 것을 필터링 한 다음 mysql 클라이언트로 다시 파이프 할 수 있습니다. 여기에 우리가

먼저까지, 여기에 데이터베이스 이제

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \ 
grep ^DROP 

우리가 -v와 GREP을 통해 경기를 반전 파이프 수에 대한 DROP 표 테이블 문 목록 있다는 구축 방법 - 우리가 문을 원하는 어떤 돈 't 당신이 확신하면, 당신이 할 수있는,

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \ 
grep ^DROP | 
grep -v 'foo\|bar' 

마지막으로 파이프를 우리가 (이 mysqldump에하는 --ignore-테이블 옵션이 될 것입니다 할 다른 방법)을 보유하고있는 테이블을 언급이 다시 mysql을

mysqldump -uUSERNAME -pPASSWORD--add-drop-table --no-data DATABASE| \ 
grep ^DROP | \ 
grep -v 'foo\|bar' | \ 
mysql -uUSERNAME -pPASSWORD DATABASE