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
'IT' 카테고리의 다른 글
JAVA_의 설정 방법Mac에서 영구적으로 홈? (0) | 2022.12.27 |
---|---|
Java의 if 문의 긴 목록 (0) | 2022.12.27 |
Python을 사용하여 touch를 구현하시겠습니까? (0) | 2022.12.27 |
할당 후 예기치 않게 변경되지 않도록 목록을 복제하려면 어떻게 해야 합니까? (0) | 2022.12.27 |
JavaScript 파일 업로드 크기 확인 (0) | 2022.12.27 |