php - 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;
解决方案
像这样的东西:
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
。
推荐阅读
- reactjs - 与 setInterval/clearInterval [react-typescript] 一起使用时的 useRef 类型
- c# - 是否可以在 C# 中反序列化 json,以便 json 中的字段实例化具有覆盖函数的特定子类?
- python - 绘制多项式和根的通用函数
- react-native - android中的react-native-snap-carousel工作正常,但在ios图像中不能通过触摸或自动捕捉
- java - 如何在运行时了解布局背景和更改文本颜色 android studio
- apache-spark - 如何延长结果?
- php - 使用 MySQL 查询查找和替换整个表中的整个条目
- angular - justify-content:中心不适用于角度组件
- mysql - 在 django 中将 sqlite 更改为 mysql 时无法加载 bms.Publisher(pk=3): (140 6, "Data too long for column 'name' at row 1")
- sql - 从redshift中的json列中提取键值对