mysql存储过程故障

时间:2014-01-21 17:32:36

标签: 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',因为它已被调用此存储函数/触发器的语句使用

所以我无法添加任何字段。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

您似乎无法更新或删除调用触发器的同一个表 但您可以通过创建另一个表来解决此问题,例如tests2而不是插入tests只需插入tests2,并让触发器将NEW.值插入测试,然后您可以从测试中计算并从测试中删除,如您所希望的那样 见sqlFiddle 这样的问题是tests2填充了插入的数据所以你可能不得不从tests2中手动删除。