我必须将表记录限制为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',因为它已被调用此存储函数/触发器的语句使用
所以我无法添加任何字段。
答案 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中手动删除。