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 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章
onPress 事件在 Android 上的 TouchableOpacity 上不起作用
主机上 Docker/MySQL 上的 PhpMyadmin
关系视图在 wampserver 2.5 上不可用 phpMyAdmin