sql - 创建触发器以在更新同一表中的特定列后更新某些列
问题描述
我有一个名为 BrrowedBookBy 的表,这里是表描述
+--------------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+-------------+------+-----+---------+-------+
| ISBN_B | char(50) | YES | | NULL | |
| PIN_M | int(11) | YES | | NULL | |
| StartDate | date | YES | | NULL | |
| EndDate | date | YES | | NULL | |
| BrrowBookCondition | tinyint(1) | YES | | NULL | |
| Late | tinyint(1) | YES | | NULL | |
| ReNew | tinyint(1) | YES | | NULL | |
| Fine | int(11) | YES | | NULL | |
| Fine_Description | varchar(30) | YES | | NULL | |
+--------------------+-------------+------+-----+---------+-------+
9 rows in set (0.040 sec)
所以我想在更新 BorrowBookCondition 列时设置触发器
我试过这样但没有在玛丽亚工作
CREATE DEFINER=`root`@`localhost` TRIGGER Set_fine
AFTER Update ON BorrowedBookBy
FOR EACH ROW
UPDATE Fine SET Fine = 50 and fine_description = “Not Meet The Condition”
where BrrowBookCondition in (select * from BorrowedBookBy where BrrowBookCondition =0);
如果我在没有任何条件的情况下输入它,它就可以正常工作
CREATE DEFINER=`root`@`localhost` TRIGGER Set_fine
AFTER Update ON BorrowedBookBy
FOR EACH ROW
UPDATE Fine SET Fine = 50 and fine_description = “Not Meet The Condition”;
解决方案
我很困惑。您的触发器指的是另一个名为的表Fine
,但您没有提到这一点。
您确定不想在要更新的同一行中设置它吗?
如果是这样:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` TRIGGER Set_fine BEFORE Update ON BorrowedBookBy
FOR EACH ROW
BEGIN
IF NEW.BrrowBookCondition = 0 THEN
SET Fine = 50;
SET fine_description = 'Not Meet The Condition;
END IF;
END;
DELIMITER ;
推荐阅读
- google-sheets - Cannot fix array formula sum with if statement
- python - 在 django web API、视图或序列化程序中的何处放置额外的逻辑?
- git - 无法使用原子文本编辑器编写提交消息
- makefile - LiME 内核模块交叉编译失败
- javascript - 推送通知不适用于“/”以外的任何范围
- r - 如何从R中数据框中的未配对元素按组折叠值
- php - Codeigniter 2 - 表单验证自定义规则
- flutter - 在颤振应用程序中添加自定义字体的困惑
- sql - 需要找到该期间/序列中记录的最小日期
- android-studio - 无论如何都要像浏览器检查那样检查计算API调用时间吗?