我目前正在编写一个Android电子商务应用程序。在购物车中,有一个项目数量的增加和减少按钮(购物车数据存储在本地)。
下面是用于根据按钮增加和减少数量的两个查询。问题是,当数量减少时,它会变为负值
谢谢
StoreDao.kt
@Query("UPDATE cart_database SET quantity = quantity - 1 where id = :id ")
suspend fun subtractQuantity(id: Int): Int
@Query("UPDATE cart_database SET quantity = quantity + 1 where id= :id ")
suspend fun addQuantity(id: Int): Int
如果下界为0,上界为10,则可以使用:-
@Query("UPDATE cart_database SET quantity = max(quantity - 1,0) where id = :id ")
suspend fun subtractQuantity(id: Int): Int
@Query("UPDATE cart_database SET quantity = min(quantity + 1,10) where id= :id ")
suspend fun addQuantity(id: Int): Int
在WHERE
子句中添加另一个条件,如果当前数量为0
,则阻止更新数量:
UPDATE cart_database
SET quantity = quantity - 1
WHERE id = :id AND quantity > 0;
这个要求,也可以在表级别通过定义CHECK
约束来解决,如下所示:
CREATE TABLE cart_database (
id INTEGER PRIMARY KEY,
quantity INTEGER CHECK(quantity >= 0)
);
不允许列数量为负值。