쿼리 명령어를 어떻게 입력해주면 될까요?
|
답변 3개 / 댓글 1개
채택된 답변
+20 포인트
8년 전
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개
답변 감사합니다. 주말 잘 보내세요.
8년 전
일단 질문의 생각에는
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
방법은 역시나 다양하네요
단순한 방법은 제가 위에 개념적으로 접근한 방법이고
전문적인건 프로시져를 만들어서 하시면되는거 같네요
답변을 작성하려면 로그인이 필요합니다.