请帮帮我。
select * from hoge where id=xxx;
如果有数据,我这样做,但是虽然我实现了这一步,但是如果在程序中,并且插入hoge set data = 0很麻烦,如果更新hoge set data = data + 1,a结果是0行。
你可能不是通过SQL的一击来实现这个程序吗? 将hoge select id,data + 1替换为来自hoge的数据,其中id = x; 当它是这个SQL时,结果不可用,因为在NULL的情况下没有输入数据。
毕竟不会是if句子中的复数还是SQL的梳子? 如果有更简单的方法,请教它。
人们提前感谢你。
答案 0 :(得分:3)
如果我正确地理解了这个问题(我不认为OP是母语为英语的人),你可以使用ON DUPLICATE KEY
在MySQL中执行此操作。
INSERT INTO table
(column1, column2, ...)
VALUES
('initial value for column1', 'initial value for column2', ...)
ON DUPLICATE KEY UPDATE
column1 = column1 + 1, column2 = 'new value for column2';
答案 1 :(得分:0)
您似乎在询问如何创建一个行(如果它尚不存在),或者如果它确实存在,则更新其中的一个字段。
正常方法(对于不提供某种形式的UPSERT
语句的DBMS'):
insert into TBL(keycol,countcol) values (key,-1)
update TBL set countcol = countcol + 1 where keycol = key
您需要忽略第一行上的任何错误(如果该行已存在,则会发生此错误)。然后第二个语句将更新它。
最初插入一个零条目也是不寻常的,因为你通常在第一次添加一个'东西'。在这种情况下,插入会将值设置为0,而不是-1。