gpt4 book ai didi

Mysql 脚本用于删除每个现有表中存在零的所有行

转载 作者:行者123 更新时间:2023-11-29 18:15:47 25 4
gpt4 key购买 nike

我有一个事件检查 3 个表以在质量低于 50 时删除一行,但现在我想更改它,以便它自动检查同一数据库中的每个表,而不总是需要重复同一行,例如在我下面的代码中

DELIMITER |
/* vervang ALTER naar CREATE voor een nieuw event*/
ALTER EVENT removezero
ON SCHEDULE EVERY 1 Hour STARTS '2017-10-30 10:00:00' ON COMPLETION PRESERVE ENABLE
DO
Begin
DELETE FROM kepserverex.plc1 WHERE BelgischePLC_PLC_1_WasCyclus_QUALITY < 50;
DELETE FROM kepserverex.plc2 WHERE BelgischePLC_PLC_2_WasCyclus_QUALITY < 50;
DELETE FROM kepserverex.plc3 WHERE BelgischePLC_PLC_3_WasCyclus_QUALITY < 50;
END|
DELIMITER ;

最佳答案

检查一下,它将为您提供执行所需的所有查询,然后创建一个过程来执行它..

SELECT GROUP_CONCAT(t.query SEPARATOR '; ')
FROM
(
SELECT CONCAT('DELETE FROM ', a.table_name,
' WHERE BelgischePLC_PLC_1_WasCyclus_QUALITY < 50;') AS query,
'1' AS id
FROM information_schema.tables a
WHERE a.table_schema = 'kepserverex'
) t
GROUP BY t.id

编辑:正如 @P.Salmon 评论的那样,如果您有太多表,您可能会达到 goupe_concat 的最大长度。您可以通过在配置文件中更改它或仅使用此查询来使其变得乞求 SET SESSION group_concat_max_len = 1000000;或者逐行打印结果

USE INFORMATION_SCHEMA;
SELECT CONCAT("DELETE FROM `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` WHERE BelgischePLC_PLC_1_WasCyclus_QUALITY < 50;")
AS MySQLCMD FROM TABLES
WHERE TABLE_SCHEMA = "kepserverex";

注意: 没有 Group_concat 的会返回行,因此您必须使用 Cursor 来迭代一组行

将结果存入sql文件并执行;我在文件名中使用小时,因为你说你将每小时执行一次事件,否则如果你想使用相同的名称或告诉 mysql 覆盖它,你将不得不删除文件

SELECT GROUP_CONCAT(t.query SEPARATOR '; ') INTO OUTFILE '/var/lib/mysql-files/hour(now())alterstatements.sql'
FROM
(
SELECT CONCAT('DELETE FROM ', a.table_name,
' WHERE BelgischePLC_PLC_1_WasCyclus_QUALITY < 50') AS query,
'1' AS id
FROM information_schema.tables a
WHERE a.table_schema = 'db_lists'
) t
GROUP BY t.id;

Source '/var/lib/mysql-files/hour(now())alterstatements.sql';

关于Mysql 脚本用于删除每个现有表中存在零的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47037127/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com