SQL MariaDB - 为每个数据库中的每个 table 循环此查询,但有例外
SQL MariaDB - Loop this query for every table in every database with exceptions
我有一个大型数据库,我每月使用下面的查询查询一次运行e。但是,我有数百个 table,我想将其变成数据库中每个 table 的 foreach 循环。
我知道如何在 PHP 中实现这个循环,但是如果能在 SQL 到 运行 中直接作为对数据库的查询就更好了。
以noprune
为前缀的table如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 名称查询:
SELECT TABLE_NAME
FROM information_schema.TABLES
WHERE SCHEMA='mydatabase'
AND TABLE_NAME NOT LIKE 'noprune%';
我有一个大型数据库,我每月使用下面的查询查询一次运行e。但是,我有数百个 table,我想将其变成数据库中每个 table 的 foreach 循环。
我知道如何在 PHP 中实现这个循环,但是如果能在 SQL 到 运行 中直接作为对数据库的查询就更好了。
以noprune
为前缀的table如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 名称查询:
SELECT TABLE_NAME
FROM information_schema.TABLES
WHERE SCHEMA='mydatabase'
AND TABLE_NAME NOT LIKE 'noprune%';