[mysql] SQL : 접두사가있는 테이블 삭제

모든 접두사가있는 내 테이블을 삭제하는 방법은 myprefix_무엇입니까?

참고 : phpMyAdmin에서 실행해야합니다.



답변

하나의 MySQL 명령만으로는 수행 할 수 없지만 MySQL을 사용하여 명령문을 구성 할 수 있습니다.

MySQL 셸 또는 PHPMyAdmin을 통해 다음 쿼리를 사용합니다.

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
    AS statement FROM information_schema.tables
    WHERE table_name LIKE 'myprefix_%';

이렇게하면 테이블을 삭제하기 위해 복사하고 실행할 수있는 DROP 문이 생성됩니다.

편집 : 여기에 고지 사항-위에서 생성 된 문은 해당 접두사가있는 모든 데이터베이스의 모든 테이블을 삭제합니다. 특정 데이터베이스로 제한하려면 쿼리를 다음과 같이 수정하고 database_name을 자신의 database_name으로 바꿉니다.

SELECT CONCAT( 'DROP TABLE ', GROUP_CONCAT(table_name) , ';' )
    AS statement FROM information_schema.tables
    WHERE table_schema = 'database_name' AND table_name LIKE 'myprefix_%';


답변

이전 답변 중 일부는 매우 좋았습니다. 나는 그들의 아이디어를 웹의 다른 답변에서 몇 가지 개념으로 모았습니다.

‘temp_’로 시작하는 모든 테이블을 삭제해야했습니다. 몇 번 반복 한 후이 코드 블록을 생각해 냈습니다.

-- Set up variable to delete ALL tables starting with 'temp_'
SET GROUP_CONCAT_MAX_LEN=10000;
SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
               FROM information_schema.TABLES
              WHERE TABLE_SCHEMA = 'my_database'
                AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ',  @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

다른 MySQL / PHP 프로그래머에게 유용하기를 바랍니다.


답변

show tables like 'prefix_%';

결과를 복사하여 텍스트 편집기에 붙여 넣거나 쿼리를 파일로 출력하고, 몇 가지 검색 및 바꾸기를 \n사용하여 원하지 않는 서식을 제거 하고 쉼표로 바꿉니다 .; 추가하고 테이블을 맨 앞에 추가합니다.

다음과 같은 결과를 얻을 수 있습니다.

drop table myprefix_1, myprefix_2, myprefix_3;


답변

@ andre-miller 솔루션은 좋지만 한 번에 모든 작업을 수행하는 데 도움이되는 더 좋고 약간 더 전문적인 솔루션이 있습니다. 여전히 둘 이상의 명령이 필요하지만이 솔루션을 사용하면 자동화 된 빌드에 SQL을 사용할 수 있습니다.

SET @tbls = (SELECT GROUP_CONCAT(TABLE_NAME)
    FROM information_schema.TABLES
    WHERE TABLE_NAME LIKE 'myprefix_%');
PREPARE stmt FROM 'DROP TABLE @tbls';
EXECUTE stmt USING @tbls;
DEALLOCATE PREPARE stmt;

참고 :이 코드는 플랫폼에 따라 다르며 MySQL 용이지만 약간의 변경으로 Postgre, Oracle 및 MS SQL에 대해 구현할 수 있습니다.


답변

SELECT CONCAT("DROP TABLE ", table_name, ";")
FROM information_schema.tables
WHERE table_schema = "DATABASE_NAME"
AND table_name LIKE "PREFIX_TABLE_NAME%";


답변

이처럼 쿼리를 편집하여 테이블을 성공적으로 삭제합니다.

SET GROUP_CONCAT_MAX_LEN=10000;
SET FOREIGN_KEY_CHECKS = 0;
SET @tbls = (SELECT GROUP_CONCAT(CONCAT('`', TABLE_NAME, '`'))
           FROM information_schema.TABLES
          WHERE TABLE_SCHEMA = 'pandora'
            AND TABLE_NAME LIKE 'temp_%');
SET @delStmt = CONCAT('DROP TABLE ',  @tbls);
-- SELECT @delStmt;
PREPARE stmt FROM @delStmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET FOREIGN_KEY_CHECKS = 1;


답변

MySQL을 사용하여 하나의 명령으로 수행 할 수 있습니다.

drop table myprefix_1, myprefix_2, myprefix_3;

하지만 코드에서 동적으로 테이블 목록을 작성해야 할 것입니다.

대안 은 MySQL 5 용 범용 루틴 라이브러리 를 사용하는 것 입니다.