插入MySql之前触发

时间:2016-02-09 09:32:12

标签: mysql sql triggers

插入前我的触发器有问题。 我尝试控制表格的行号' 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 ;

然而,它不起作用。有人有解决方案来帮助我。 感谢。

1 个答案:

答案 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;