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

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

QA

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  = CONCAT('DROP TABLE ', db, '.', tbl);
                PREPARE stmt FROM ;
                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



방법은 역시나 다양하네요

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

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




답변을 작성하시기 전에 로그인 해주세요.
전체 123,674 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT