我正在尝试用c ++执行sql操作 我的问题是我使用下面的stmt
创建了一个旅行表stmt->execute("CREATE TABLE travel(src VARCHAR(20), dest VARCHAR(20), ppkm INT(10), km INT(50), total INT(50))");
我使用下面的stmt
将值插入旅行表stmt->execute("INSERT INTO travel VALUES('MYS', 'BAN', 6, 150, 'UPDATE travel SET total = ppkm * km')");
我成功执行并插入了值,但只有最终插入值才能得到0而不是6 * 150 = 900.请帮我解决更新查询语法。 提前谢谢。
答案 0 :(得分:1)
如果要将总数设置为两个值的乘积,则可以使用触发器自动设置它。更合理的是,只需在插入中执行:
INSERT INTO travel(src, dest, ppkm, km, total)
SELECT 'MYS', 'BAN', 6, 150, 6 * 150
您也可以使用视图执行所需操作。创建没有总列的表,然后创建一个总计为的视图:
create view v_travel as
select t.*, ppkm * km as total
from travel t;
或者您可以在插入后手动执行此操作:
INSERT INTO travel(src, dest, ppkm, km)
SELECT 'MYS', 'BAN', 6, 150;
UPDATE travel
SET total = ppkem * km;
答案 1 :(得分:0)
INSERT INTO travel VALUES('MYS', 'BAN', 6, 150, 'UPDATE travel SET total = ppkm * km')
是有效的,但您尝试将INSERT
文本'UPDATE travel SET total = ppkm * km'
放入INT字段,该字段将转换为0作为第一个字符,' U',不是数字。
如果您想将其作为INSERT的一部分,则必须手动进行计算:
INSERT INTO travel VALUES('MYS', 'BAN', 6, 150, 6*150);
或者使用TRIGGER
,或者不存储计算出的值,而是按照Gordon的建议使用视图。
另外,INT(50)
没有意义,因为INT
永远不会超过10位数。如果您需要更多,请使用BIGINT
。