IT

SQL: 프리픽스가 있는 테이블 삭제

itgroup 2022. 12. 27. 21:15
반응형

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 문이 생성됩니다.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;

@syslog 솔루션도 좋지만, 한 번에 모든 것을 실행할 수 있도록 지원하는 보다 우수하고 전문적인 솔루션이 있습니다.그래도 여러 개의 명령어가 필요하지만 이 솔루션을 사용하면 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;

GROUP_CONCAT를 사용하는 다른 솔루션일 뿐이므로 다음과 같은 하나의 드롭 쿼리를 실행할 수 있습니다.
TABLE1, TABLE2, 를 드롭 합니다.

SET @Drop_Stm = CONCAT('DROP TABLE ', (
      SELECT GROUP_CONCAT(TABLE_NAME) AS All_Tables FROM information_schema.tables 
      WHERE TABLE_NAME LIKE 'prefix_%' AND TABLE_SCHEMA = 'database_name'
)); 
PREPARE Stm FROM @Drop_Stm; 
EXECUTE Stm;
DEALLOCATE PREPARE Stm;

MySQL을 사용하여 다음 명령어를 실행할 수 있습니다.

drop table myprefix_1, myprefix_2, myprefix_3;

단, 테이블 리스트를 동적으로 코드로 작성해야 합니다.

대체 접근법은 MySQL 5에 범용 루틴 라이브러리를 사용하는 것입니다.

사용한 SQL을 투고하고 싶을 뿐입니다.상위 3가지 답변이 혼재되어 있습니다.

SET GROUP_CONCAT_MAX_LEN=10000;

SET @del = (
    SELECT      CONCAT('DROP TABLE ', GROUP_CONCAT(TABLE_NAME), ';')
    FROM        information_schema.TABLES

    WHERE       TABLE_SCHEMA = 'database_name'
    AND         TABLE_NAME LIKE 'prefix_%'
);

PREPARE stmt FROM @del;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

좀, 이 문장은 ''는 '어렵다'는 '어렵다'는 '어렵다'는 '어렵다'는 '어렵다'는 '어렵다'는 '어렵다'는 '어렵다'는 '어렵다'는 뜻'으로 요.GROUP_CONCAT_MAX_LEN테이블이 많으면 꼭 필요했던 것 같아요. 결과 mysql 명령줄에서 컷 앤 페이스트하여 3단계 프로세스를 간단하게 수행할 수 있었습니다.

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

그런 다음 긴 DROP 문을 조심스럽게 잘라 붙여넣습니다.

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

반응형