在sqlite中限制列的值



我目前正在编写一个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)
);

不允许列数量为负值。

最新更新