mysql 存储过程出现故障

标签 mysql sql

我必须将表记录限制为 25。在我删除所有内容之后(将来将修改它以仅删除最旧的行)

DELIMITER //
CREATE PROCEDURE p1 () delete FROM tests;//

CREATE TRIGGER trigger1
BEFORE INSERT
ON tests
FOR EACH ROW
BEGIN
  SELECT COUNT(*) INTO @cnt FROM tests;
  IF @cnt >= 25 THEN
    CALL p1();
  END IF;
END
//

DELIMITER ;

,但我收到错误: 无法更新存储函数/触发器中的表“tests”,因为它已被调用此存储函数/触发器的语句使用

所以我无法添加更多字段。

最佳答案

MySQL触发器常见问题解答说您无法修改调用触发器的表。

但是您可以在 MySQL 中设置一个 cron 作业或 CREATE EVENT 来定期清理表。 (CREATE EVENT需要PROCESS权限和正在运行的event_scheduler。event_scheduler默认关闭:可以从SQL控制台打开它,但必须修改MySQL配置以确保它在MySQL重新启动时启动。)

关于mysql 存储过程出现故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21265173/

相关文章:

mysql 有重复的键

php - 在php中包含另一个类中的类

mysql - 计算行值的总数

php - 从 MySQL 表中选择,按匹配的类别数排序

PHP 理解准备好的语句

mysql - 如何在系统启动时在 OS X 中启动分离的 mySQL 服务器?

mysql - SQL 更新时更改计数器

mysql - 如何在MySQL更新查询中使用子选择结果作为临时表?

php - 将多行合并为一行的最有效方法

mysql - AWS RDS 中止连接 Haproxy