mariadb 如果在UPDATE查询期间不满足条件,则在终端上出现RAISE OR PRINT ERROR

vc6uscn9  于 7个月前  发布在  其他
关注(0)|答案(1)|浏览(58)

我在MARIADB终端工作。我有一个任务,写查询,扣除产品的数量由5,在它更新之前,它需要检查,我们有足够的数量。如果数量低于0,那么我们不想更新,相反,我们想抛出一个错误。
这不是一个pl/sql或过程。只是一个我们可以直接在terminal/mysqlshell上执行的查询
到目前为止编写的查询:

Update inventory 
 SET 
 quantity_in_stock = 
 IF(((SELECT quantity_in_stock from inventory WHERE product_id = 101)-5) >= 0,
 ((SELECT quantity_in_stock from inventory where product_id =101)-5),
 ()
 where product_id = 101;

我想在()部分(查询的最后一行)引发ERROR。
SQL-MARIADB语句在更新查询的()部分引发/生成错误。

bvuwiixz

bvuwiixz1#

如果可能的话,数据完整性遵从性应该在服务器端完成,而不是由应用程序完成。
例如,为了防止订购库存量不足的特定物品,必须确保库存量不能为负。这需要在表的定义中指定。
如果将quantities_in_stock定义为无符号整数,则它不能<0。
范例:

CREATE TABLE inventory(product_id INT UNSIGNED NOT NULL, quantity INT UNSIGNED);
INSERT INTO inventory VALUES (1, 3);
UPDATE inventory SET quantity=quantity - 5 WHERE product_id=1;
ERROR 1690 (22003): BIGINT UNSIGNED value is out of range in '`test`.`inventory`.`quantity` - 5'

如果不能修改表定义,则可以创建触发器。确保数据完整性的另一个选项是检查约束。

相关问题