我正在为学校开发一个实验室,其中规定:“创建一个名为 products_before_update 的触发器,用于检查 Products 表的discount_percent 列的新值。如果折扣百分比大于 100 或小于0。
如果新折扣百分比介于 0 和 1 之间,则此触发器应将新折扣百分比乘以 100 来修改。这样,折扣百分比 0.2 就会变为 20。
使用适当的 UPDATE 语句测试此触发器。”
我的脚本成功更新了折扣百分比列,但是“如果,那么”部分似乎没有完成任何任务。如果我输入超过 100 的折扣百分比,它不会显示任何错误,只会更新它。如果我的折扣百分比小于零,同样的问题。另外,如果我输入 0-1 之间的数字,那么它不会乘以 10。任何建议将不胜感激!
这是我的代码:
USE my_guitar_shop;
DROP TRIGGER IF EXISTS products_before_update;
DELIMITER //
CREATE TRIGGER products_before_update
BEFORE UPDATE ON Products
FOR EACH ROW
BEGIN
DECLARE discount_percent_amount INT;
SELECT discount_percent
INTO discount_percent_amount
FROM Products
WHERE product_id = NEW.product_id;
IF discount_percent_amount > 100 THEN
SIGNAL SQLSTATE 'HY000'
set message_text =
'the discount percent cannot be greater than 100';
ELSEIF discount_percent_amount < 0 THEN
SIGNAL SQLSTATE 'HY000'
set message_text =
'the discount percent cannot be less than 0';
ELSEIF discount_percent_amount < 1 THEN
SET discount_percent_amount = (discount_percent * 10);
END IF;
END//
DELIMITER ;
UPDATE Products
SET discount_percent = .4
WHERE product_id = 3;
SELECT * FROM products;
最佳答案
我终于明白了,谢谢你的提示......
USE my_guitar_shop;
DROP TRIGGER IF EXISTS products_before_update;
DELIMITER //
CREATE TRIGGER products_before_update
BEFORE UPDATE ON Products
FOR EACH ROW
BEGIN
IF NEW.discount_percent > 100 THEN
SIGNAL SQLSTATE 'HY000'
set message_text =
'the discount percent cannot be greater than 100';
ELSEIF new.discount_percent < 0 THEN
SIGNAL SQLSTATE 'HY000'
set message_text =
'the discount percent cannot be less than 0';
ELSEIF NEW.discount_percent < 1 THEN
SET NEW.discount_percent = (NEW.discount_percent * 100);
END IF;
END//
DELIMITER ;
UPDATE Products
SET discount_percent = .4
WHERE product_id = 3;
关于mysql - 在 MySql 中更新表时验证行项目金额的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20013957/