채택완료

g4_ 접두어로 시작하는 테이블 한방에 날리려면?

쿼리 명령어를 어떻게 입력해주면 될까요?


|

답변 3개 / 댓글 1개

채택된 답변
+20 포인트

CALL DROP_TABLES('test', NULL); -- 아무것도 하지않음

CALL DROP_TABLES('test', ''); -- test 데이터베이스 모든 테이블 삭제 

CALL DROP_TABLES('test', 'a'); -- test 데이터베이스 'a' 접두어로 시작하는 테이블 삭제 


안전을 위해서는 사실 dbname 인자는 빠져야하고,

작업할 database 선택하게 한 후 고정적으로 그 범주 안에서 동작하게 하는 것이 맞기는 하나,

테스트성 작업을 위해 편의상 구성된 것입니다.


Copy
CREATE PROCEDURE `DROP_TABLES`(IN dbname VARCHAR(100), IN tblname_prefix VARCHAR(100))BEGIN    DECLARE done INT DEFAULT FALSE;    DECLARE db  VARCHAR(100);    DECLARE tbl VARCHAR(255);    DECLARE cur CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = dbname;    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;        OPEN cur;        read_loop: LOOP            FETCH cur INTO db, tbl;            IF done THEN                LEAVE read_loop;            END IF;                        IF INSTR(tbl, tblname_prefix) = 1 THEN                SET @query = CONCAT('DROP TABLE ', db, '.', tbl);                PREPARE stmt FROM @query;                EXECUTE stmt;                DEALLOCATE PREPARE stmt;                                SELECT CONCAT(db, '.', tbl, ' is dropped') removed FROM DUAL;            END IF;        END LOOP;    CLOSE cur;END

답변에 대한 댓글 1개

답변 감사합니다. 주말 잘 보내세요. 

일단 질문의 생각에는 


string 으로 show tables 해서 for/while 등으로 string 문장들을 만들고, 

다시금 for String으로 drop 순환을 생각했는데


혹시나 검색해봤습니다.


몇가지가 있는데


둘다 영문페이지라.. 여러가지 답이 있지만 

원하시는게 뭔지 보시면 아시지 않을까 싶네요


https://stackoverflow.com/questions/1589278/sql-deleting-tables-with-prefix


https://dev.mysql.com/doc/refman/5.7/en/drop-table.html



방법은 역시나 다양하네요

단순한 방법은 제가 위에 개념적으로 접근한 방법이고

전문적인건 프로시져를 만들어서 하시면되는거 같네요




답변을 작성하려면 로그인이 필요합니다.