MYSQL 上的事件在 phpmyadmin 上不起作用

Posted

技术标签:

【中文标题】MYSQL 上的事件在 phpmyadmin 上不起作用【英文标题】:EVENTS on MYSQL aren't working on phpmyadmin 【发布时间】:2019-06-10 17:01:01 【问题描述】:

我在 mysql 中创建事件时遇到问题。

前几天我买了一个服务器,把我页面的所有信息,包括数据库都加进去了。

我想在名为 NEWAHORROSH 的某个表中每 24 小时执行一次 UPDATE

包含数据的:

CREATE TABLE newahorrosh (
id int not null auto_increment primary key,
user_id int not null,
capital_real float (11,2) not null,
interests float (11,2) not null,
capital_total float (11,2) as (capital_real + interest)
);

我的活动代码是:

DELIMITER |

CREATE EVENT CalculoIntereses
ON SCHEDULE EVERY 24 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
BEGIN
    IF (newahorrosh.capital_real> 1 AND newahorrosh.capital_real <500) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 3 * 1/36000));
    ELSEIF (newahorrosh.capital_real> 5001 AND newahorrosh.capital_real <1000) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 4 * 1/36000));
    ELSEIF (newahorrosh.capital_real> 1001 AND newahorrosh.capital_real <5000) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 5 * 1/36000));
    ELSEIF (newahorrosh.capital_real> 5001 AND newahorrosh.capital_real <15000) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 6 * 1/36000));
    ELSEIF (newahorrosh.capital_real> 15001) THEN
        UPDATE newahorrosh SET interests = interests + ((capital_real * 7 * 1/36000));
    END IF;

END |

DELIMITER;

该事件被完美地创建,没有错误,但是当到达必须更新信息的时间时,它不会被执行。我已经注意到我的 phpmyadmin 中的活动日程安排已开启。

我重复一遍,它在创建事件时不会给我带来错误,但是当我在我的 phpmyadmin 中打开我的事件时,它会在我的代码中显示 X 个错误

errors

非常感谢您的帮助,因为我有将近 2 周的时间来解决这个问题。千感谢您的宝贵时间。

【问题讨论】:

您发布的代码不反映您使用的任何标签。 @FunkFortyNiner 感谢您的评论好友。我已经更新了我的问题。 "事件被完美创建,没有错误,但是当信息必须更新的时间到来时,它不会被执行。"你读过关于CREATE EVENT 的MySQL 手册吗? “此语句创建并安排一个新事件。除非启用 Event Scheduler,否则该事件不会运行”有关检查 Event Scheduler 状态并在必要时启用它的信息,请参阅第 24.4.2 节,@987654322 @." @RaymondNijland 感谢您的评论:“...我已经注意到我的 phpmyadmin 中的事件时间表已开启”。 您确定您用来创建活动的 MySQL 用户也具有活动中使用的 newahorrosh 表的 UPDATE 权限吗?此外,您可能还想添加ON COMPLETION PRESERVE,否则该事件在运行时将是一次性事件。 【参考方案1】:

事件执行时newahorrosh.capital_real从哪里来?

由于目前没有 ELSE 语句并且没有可比较的值,所有检查都失败并且没有执行任何操作。

事件主体内的 SQL 仅在运行时评估,这意味着事件发生的时间。在定义事件时,SQL 不会被评估,即使代码中有语法错误也可能会提交。

所以你永远不会在 phpMyAdmin 中看到错误,即使你的活动内容完全是废话。

您需要运行SELECT 以获得一些值,以便在您的IF 语句中进行比较。

或者您编写一个UPDATE 语句并使用IF()CASE 动态计算每一行的新值,如下所示:

DELIMITER |

CREATE EVENT CalculoIntereses
ON SCHEDULE EVERY 24 HOUR
STARTS CURRENT_TIMESTAMP + INTERVAL 1 MINUTE
ENDS CURRENT_TIMESTAMP + INTERVAL 1 YEAR
DO
BEGIN
UPDATE newahorrosh SET interests = interests + (1/36000 * capital_real * 
  (CASE 
    WHEN capital_real < 500   THEN 3
    WHEN capital_real < 1000  THEN 4
    WHEN capital_real < 5000  THEN 5
    WHEN capital_real < 15000 THEN 6
    ELSE 7
  END)
);
END |
DELIMITER;

顺便说一句:您的初始IF 声明中也有错字/空白:

newahorrosh.capital_real> 5001 AND newahorrosh.capital_real <1000

我猜你想写:

newahorrosh.capital_real> 501 AND newahorrosh.capital_real <1000

因此,即使您的代码可以按预期工作,它仍然不适用于 501 到 1000 之间的值。此范围内的值不会发生任何事情。

【讨论】:

非常感谢您的回答一切正常我将 24 小时更改为 1 分钟

以上是关于MYSQL 上的事件在 phpmyadmin 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在phpmyadmin EVENT创建mysql中的每个

onPress 事件在 Android 上的 TouchableOpacity 上不起作用

主机上 Docker/MySQL 上的 PhpMyadmin

关系视图在 wampserver 2.5 上不可用 phpMyAdmin

phpMyAdmin 无法登录 Centos 7 上的 MySQL 服务器

Ubuntu上的Mysql apache2 phpmyadmin