插入前我的触发器有问题。 我尝试控制表格的行号' user_search'一个人的id_user'如果这个行号> 4,应删除最旧的行。 我的实际触发器是:
DELIMITER $$
CREATE TRIGGER before_insert_user_search
BEFORE INSERT
ON user_search FOR EACH ROW
BEGIN
DECLARE sDate DATETIME;
SELECT MIN(date_search) FROM user_search WHERE id_user = NEW.id_user INTO sDate;
IF ((SELECT COUNT(id) FROM user_search WHERE id_user = NEW.id_user) > 4) THEN
BEGIN
DELETE FROM user_search WHERE date_search = sDate;
END;
END IF;
END$$
DELIMITER ;
然而,它不起作用。有人有解决方案来帮助我。 感谢。
答案 0 :(得分:1)
在使用INSERT触发器期间,您无法删除相同的表行,因为它包含表的 lock 。因此,尝试编写存储过程以插入新记录。
存储过程应该类似于下面的内容:
CREATE PROCEDURE insert_user_search(new_id_user INT, ......other variable to inert)
BEGIN
DECLARE @minId INT;
//INSERT using parameter
SET @minId = SELECT MIN(id) FROM user_search WHERE id_user = new_id_user;
IF ((SELECT COUNT(id) FROM user_search WHERE id_user = new_id_user) > 4) THEN
BEGIN
DELETE FROM user_search WHERE id_user = @minId;
END;
END IF;
END;