如果存在记录,则获取现有列,比较它然后进行更新或者只是插入新记录

时间:2014-05-18 10:09:01

标签: mysql

如果记录不存在,我需要插入一条新记录,但如果它存在则 我需要从该行中选择一个特定的列值并根据它进行更新。

我已设法写下面的查询,它在更新时使用重复插入/更新

insert into securities(symbol, buyerquan, sellerquan , totaltradedquan) values('BANKBARODA', 73, 0, 4290270) on duplicate key update  buyerquan=buyerquan+VALUES(buyerquan),sellerquan=sellerquan+VALUES(sellerquan),totaltradedquan=totaltradedquan+VALUES(totaltradedquan)

这是我的sqlfiddle http://sqlfiddle.com/#!2/aaf91/5

我的要求是

如果记录存在,我如何获取现有列,进行比较然后进行更新?

我们是否需要编写另一个SQL查询来获取现有列值?

如果存在记录,则获取现有列,比较它然后进行更新或者只是插入新记录

我们可以在同一个查询中完成所有这些吗?

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:1)

Mysql有一个快捷方式,它被称为“INSERT ... ON DUPLICATE KEY UPDATE”

http://dev.mysql.com/doc/refman/5.6/en/insert-on-duplicate.html

答案 1 :(得分:0)

你的问题很模糊。例如,您没有指定用于定义副本的列。根据您的查询,我猜您的意思是symbol

您的查询是:

insert into securities(symbol, buyerquan, sellerquan , totaltradedquan)
    values('BANKBARODA', 73, 0, 4290270)
    on duplicate key update buyerquan = buyerquan+VALUES(buyerquan), 
                            sellerquan = sellerquan + VALUES(sellerquan), 
                            totaltradedquan = totaltradedquan + VALUES(totaltradedquan);

这似乎是正确的语法(对于大多数人来说,这是问题的难点)。唯一缺少的是唯一性的规范:

create unique index securities_symbol on securities(symbol);

您还可以使用create table关键字在unique语句中指定此条件。