是否可以在同一查询中使用新值进行选择和更新?

时间:2014-05-15 21:36:48

标签: mysql

我已经掌握了以下表结构

mysql> desc test
    -> ;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | varchar(19) | NO   | PRI |         |       |
| name  | varchar(19) | YES  |     | NULL    |       |
| age   | varchar(19) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
3 rows in set (0.05 sec)

最初,我已经完成了插图

insert into test (id, name, age) values("1", "A", 19);

我的要求是,我需要提取id的年龄" 1"并在现有年龄中添加一些整数

我在下面看过这个例子,在我的情况下可能有用吗?

insert into test (id, name, age) values("1", "A", 30) on duplicate key update  age=values(age)

我正在使用JAVA,我有300的符号,我需要更新contonouslly

是否可以在同一查询中选择并使用新值更新现有列?

例如

如何获得现有的19岁并在同一个查询中为其添加30个id 1?

2 个答案:

答案 0 :(得分:1)

(Marc B在评论部分已经回答了这个问题。)

是的,OP发布的语句将正常工作,因为id列上存在主键约束,INSERT ... ON DUPLICATE KEY将导致现有行的UPDATE。

要将插入的值“添加”到列中已存在的值,我们将为该列分配一个执行该操作的表达式:

e.g。

insert into test (id, name, age) values("1", "A", 30) 
on duplicate key update age = age + values(age)
                              ^^^^^

请注意,OP语句中唯一需要的更改是对现有列值的引用和添加操作。

N.B。如果列中的现有值或INSERT语句中提供的新值为 NULL ,则表达式的结果将为 NULL 。如果这是不期望的行为,则需要不同的表达。

答案 1 :(得分:0)

这应该有效:

UPDATE test SET age=age+1 WHERE id=1;