g4_ 접두어로 시작하는 테이블 한방에 날리려면?
본문
쿼리 명령어를 어떻게 입력해주면 될까요?
답변 3
CALL DROP_TABLES('test', NULL); -- 아무것도 하지않음
CALL DROP_TABLES('test', ''); -- test 데이터베이스 모든 테이블 삭제
CALL DROP_TABLES('test', 'a'); -- test 데이터베이스 'a' 접두어로 시작하는 테이블 삭제
안전을 위해서는 사실 dbname 인자는 빠져야하고,
작업할 database 선택하게 한 후 고정적으로 그 범주 안에서 동작하게 하는 것이 맞기는 하나,
테스트성 작업을 위해 편의상 구성된 것입니다.
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
일단 질문의 생각에는
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
방법은 역시나 다양하네요
단순한 방법은 제가 위에 개념적으로 접근한 방법이고
전문적인건 프로시져를 만들어서 하시면되는거 같네요
답변 감사합니다. 주말 잘 보내세요.
답변을 작성하시기 전에 로그인 해주세요.