我已经掌握了以下表结构
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?
答案 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;