插入数据至SQLite时自动计算总价的实现问题
解决SQLite插入时自动计算总价的问题
你之前的代码无法生效,是因为VALUES子句里不能直接引用目标表的列名——此时数据还未插入到表中,price和amount这两个列还没有对应当前行的有效值。
下面是几种可行的解决方案:
方案1:直接在VALUES中计算参数值
把传入的单价和数量参数直接相加,作为总价的占位符值:
INSERT INTO product (name, price, amount, total) VALUES (?, ?, ?, (? + ?))
注意参数顺序:第二个?对应price,第三个?对应amount,第四个?要和第二个?使用同一个参数值,第五个?和第三个?使用同一个参数值(具体取决于你编程语言里的参数绑定顺序)。
方案2:使用INSERT...SELECT语句
通过SELECT子句来计算总价,这种写法更直观,也能避免参数重复绑定:
INSERT INTO product (name, price, amount, total) SELECT ?, ?, ?, (? + ?)
方案3:使用生成列(推荐)
如果你的SQLite版本在3.31.0及以上,建议直接给total列设置为生成列,这样插入数据时不需要手动计算总价,数据库会自动维护这个值:
首先修改表结构(如果还没创建表就直接用这个语句创建):
CREATE TABLE product ( name TEXT, price NUMERIC, amount NUMERIC, total NUMERIC GENERATED ALWAYS AS (price + amount) STORED );
之后插入数据时只需要传入name、price、amount即可,total会自动计算:
INSERT INTO product (name, price, amount) VALUES (?, ?, ?)
STORED表示这个值会被存储在磁盘上,查询时不需要实时计算;如果用VIRTUAL,则是查询时实时计算,不占用存储空间,可根据需求选择。
内容的提问来源于stack exchange,提问作者Milli
相关产品推荐
相关产品推荐

