首页 > 解决方案 > mysql触发器限制为id列插入的行数

问题描述

我希望我网站的用户使用我的 HTML 表单提交数据。但是,我希望每个用户总共只能提交 5 次。为此,我使用 MySQL DML 触发器将我的列“um_id”限制为每个 id 仅五行。但是,我知道我的语法是错误的,我要求这里的任何人帮助纠正它,这样它才能真正起作用。

现在我正在 PHPMyAdmin 中对此进行测试,它最终将被放置在我的 PHP 文件中。所以 um_id 将有一个值并与此 SQL 触发器连接。

CREATE TRIGGER ml_trigger 
BEFORE INSERT 
ON ml_character;
BEGIN
IF ( SELECT . 'um_id' . COUNT(*) > 5 ) THEN ROLLBACK;
END IF;

标签: phpmysqltriggers

解决方案


像这样的东西:

DELIMITER $$

CREATE TRIGGER ml_trigger_bi 
BEFORE INSERT
ON ml_character
FOR EACH ROW
BEGIN
   -- get count of existing rows with same um_id
   DECLARE li_cnt BIGINT;
   SELECT COUNT(*) AS cnt
     FROM ml_character t
    WHERE t.um_id = NEW.um_id
     INTO li_cnt ;
   -- if already five rows, throw error
   IF li_cnt >= 5 THEN
      SIGNAL '45000' SET MESSAGE_TEXT = 'Already five rows in ml_character';
   END IF;
END$$

DELIMITER ;

要检查的值um_id将来自被插入的行;我们将该值引用为NEW.um_id


推荐阅读