MYSQL查询帮助:如果存在更新

时间:2011-11-12 15:20:39

标签: mysql if-statement exists

我正在为博客制作每日计数器,我对此查询有疑问:

IF EXISTS SELECT * FROM tableA WHERE blog_id=1
    UPDATE FROM tableA SET c=c+'1' WHERE blog_id='1' AND c_date=NOW()
ELSE
    INSERT INTO FROM tableA VALUES (blog_id,c,c_date) VALUES (1,1,now())

显示以下错误:

  

1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法

     

靠近'IF EXISTS SELECT * FROM tableA WHERE blog_id = 1 UPDATE FROM   tableA SET c = c +''在第1行

My table entries should look like this :
id , blod_id , c , c_date
1 , 1001, 66 , 2011-11-11 
2 , 1001, 160 , 2011-11-12
3 , 1002, 200 , 2011-11-12
4 , 1003, 33 , 2011-11-12

2 个答案:

答案 0 :(得分:3)

我怀疑你正在使用insert into on duplicate key update语法

从手册:

  

12.2.5.3。 INSERT ... ON DUPLICATE KEY UPDATE语法

     

如果指定ON DUPLICATE KEY UPDATE,则插入会导致a的行   UNIQUE索引或PRIMARY KEY中的重复值,旧的UPDATE   行已执行。

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

您的查询应该更像以下示例:

INSERT INTO tableA (blog_id,c,c_date) VALUES (1,1,now()) ON DUPLICATE KEY UPDATE `c` = `c`+1, `c_date` = NOW()

您需要UNIQUE密钥或PRIMARY KEY才能生效。

ALTER TABLE  `table` ADD PRIMARY KEY (  `id` )

根据您的表示例,您可以向id列添加主键,或在(c_date, blog_id)字段上添加唯一的综合索引

ALTER TABLE  `table` ADD UNIQUE (
blog_id ,
c_date
);

并使用此:

INSERT INTO tableA (blog_id, c, c_date) 
  VALUES (1, 1, NOW()) 
ON DUPLICATE KEY UPDATE 
  c = c + 1                --- update only `c`, not any part of the unique key

答案 1 :(得分:1)

在我看来,你真正想要的是this(注意,它只适用于MySQL)!