如何更新mysql中的插入查询?

时间:2014-07-23 10:59:42

标签: mysql

我正在尝试用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.请帮我解决更新查询语法。 提前谢谢。

2 个答案:

答案 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