Php mysql触发器限制为id列插入的行数
我想我的网站的用户提交数据与我的HTML表单。但是,我希望每个用户总共提交5次。为了做到这一点,我使用MySQL DML触发器将我的列“um_id”限制为每个id只有五行。但是,我知道我的语法是错误的,我要求这里的任何人帮助更正它,以便它能够实际工作 现在我正在PHPMyAdmin中测试它,它最终将被放在我的PHP文件中。因此,um_id将有一个值,并与此SQL触发器连接Php mysql触发器限制为id列插入的行数,php,mysql,triggers,Php,Mysql,Triggers,我想我的网站的用户提交数据与我的HTML表单。但是,我希望每个用户总共提交5次。为了做到这一点,我使用MySQL DML触发器将我的列“um_id”限制为每个id只有五行。但是,我知道我的语法是错误的,我要求这里的任何人帮助更正它,以便它能够实际工作 现在我正在PHPMyAdmin中测试它,它最终将被放在我的PHP文件中。因此,um_id将有一个值,并与此SQL触发器连接 CREATE TRIGGER ml_trigger BEFORE INSERT ON ml_character; BEG
CREATE TRIGGER ml_trigger
BEFORE INSERT
ON ml_character;
BEGIN
IF ( SELECT . 'um_id' . COUNT(*) > 5 ) THEN ROLLBACK;
END IF;
大概是这样的:
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
使用having
不确定您要查询什么,但类似于选择count(*)作为其中um_id=?拥有计数<5
是,这完全符合我的要求!你太棒了!它不断抛出一个语法错误#1064,但有一次我在发出信号后立即添加了SQLSTATE,它实际工作了。DOH!我在SIGNAL语句中遗漏了SQLSTATE关键字。我的错。