programing

SQL MariaDB - 예외가 있는 모든 데이터베이스의 모든 테이블에 대해 이 쿼리 반복

powerit 2023. 7. 22. 10:32
반응형

SQL MariaDB - 예외가 있는 모든 데이터베이스의 모든 테이블에 대해 이 쿼리 반복

아래 쿼리를 사용하여 매월 제거하는 대용량 데이터베이스가 있습니다.그러나 수백 개의 테이블이 있으며 데이터베이스의 각 테이블에 대해 각 루프로 만들고 싶습니다.

저는 PHP에서 이 루프를 달성하는 방법을 알고 있지만 데이터베이스에서 직접 쿼리로 실행할 수 있도록 순수 SQL로 하면 좋습니다.

다음으로 접두사가 붙은 테이블noprune예를 들어noprune_master_tableZ루프에서 빠질 필요가 있습니다.

어디서부터 시작하죠?감사해요.

START TRANSACTION;
set @N := (now());
CREATE TABLE master_tableA_snapshot AS SELECT * FROM master_tableA where insertDATE < date_sub(@N,INTERVAL 32 DAY);
SELECT * from master_tableA_snapshot INTO OUTFILE '/tmp/master_tableA_snapshot_TODAYSDATE.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
DELETE from master_tableA where insertDATE < date_sub(@N,INTERVAL 32 DAY);
DROP TABLE master_tableA_snapshot;
COMMIT;

도우미 변수가 다음과 같이 단순화된 두 개의 문만 있습니다.

set @N := date_sub(NOW(),INTERVAL 32 DAY);

SELECT *
FROM master_tableA
WHERE insertDATE < @N
INTO OUTFILE '/tmp/master_tableA_snapshot_TODAYSDATE.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

DELETE from master_tableA where insertDATE < @N;

PHP는 쿼리가 있는 테이블 이름을 선택합니다.

SELECT TABLE_NAME
FROM information_schema.TABLES
WHERE SCHEMA='mydatabase'
  AND TABLE_NAME NOT LIKE 'noprune%';

언급URL : https://stackoverflow.com/questions/53550756/sql-mariadb-loop-this-query-for-every-table-in-every-database-with-exceptions

반응형