mysql - 在 MySql 中更新表时验证行项目金额的触发器

标签 mysql sql if-statement triggers

我正在为学校开发一个实验室,其中规定:“创建一个名为 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/

相关文章:

c# - 从数据库中获取特定时间间隔的值

c# - 无法永久更改 search_path

python - if 部分的变量范围

loops - Arduino循环中的奇怪行为

mysql - 查找数组中不存在于列中的字段

sql - 在 sql server 中将 % 通配符与 ' in ' 运算符一起使用

php - 无法通过html表单更新Mysql数据库中的一列

Python - 在曲线函数上方返回数组中的元素数

Java else 语句错误

MySQL如何对不确定值的列表进行分区?