SQL MariaDB - цикл этот запрос для каждой таблицы в каждой базе данных с исключениями - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть большие базы данных, которые я очищаю ежемесячно, используя запрос ниже.Однако у меня есть сотни таблиц, и я хотел бы сделать это циклом foreach для каждой таблицы в базах данных.

Я знаю, как выполнить этот цикл в 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;

1 Ответ

0 голосов
/ 30 ноября 2018

У вас есть только два оператора с упрощенной вспомогательной переменной:

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%';
...