在一个查询中更新/增加多个MySQL列

时间:2010-07-29 04:41:41

标签: mysql sql sql-update

我有这个查询,有效......

UPDATE `contacts` 
       SET `calls_to`=`calls_to`+1 
  WHERE `contact_no` = '0412345678';

我还想做的是在费用字段中添加一个值。根据我的理解,这样做的方法是......

UPDATE `contacts` 
       SET `calls_to` = `calls_to`+1, 
             `cost_to` = `cost_to`+0.25 
  WHERE `contact_no`='0412345678';

显然,正如我在这里张贴的那样,它并没有像我期望的那样发挥作用。

- UPDATE -

根据要求,表格结构..

id                  int(255) auto_increment
contact_owner  varchar(255)
contact_no       varchar(11)
contact_name   varchar(255)
calls_to            int(255)
txts_to             int(255)
time_talked_to   int(255)
cost_to            decimal(65,2)

4 个答案:

答案 0 :(得分:3)

检查cost_to的数据类型是否为int。如果列的值不为null,也要更新列。

UPDATE `contacts` 
       SET `calls_to` = `calls_to`+1, 
             `cost_to` = `cost_to`+0.25 
  WHERE `contact_no`='0412345678' AND
          calls_to is not null AND
          cost_to is not null;

答案 1 :(得分:1)

乍一看,查询看起来很好。 cost_to字段的类型是什么?仔细检查它不是一个完整的类型,因为你将无法得到你想要的结果。 (作为测试,添加一个更大的值,比如4到cost_to。)

答案 2 :(得分:0)

我认为您的calls_to字段为int,cost_to字段为不同类型,因此只有您没有得到结果。检查字段的类型。

答案 3 :(得分:0)

单表语法:

UPDATE [LOW_PRIORITY] [IGNORE] table_reference
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

多表语法:

UPDATE [LOW_PRIORITY] [IGNORE] table_references
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ...
[WHERE where_condition]

对于单表语法, UPDATE 语句使用新值更新指定表中现有行的列。 SET 子句指示要修改的列以及应该给出的值。每个值都可以作为表达式给出,或者关键字 DEFAULT 可以将列明确设置为其默认值。 WHERE 子句(如果给定)指定用于标识要更新的行的条件。使用 no WHERE 子句,所有行都会更新。如果指定了 ORDER BY 子句,则按指定的顺序更新行。 LIMIT 子句限制了可以更新的行数。

对于多表语法, UPDATE 更新table_references中指定的满足条件的每个表中的行。每个匹配的行都会更新一次,即使它与条件多次匹配也是如此。对于多表语法,不能使用 ORDER BY LIMIT