我正在为博客制作每日计数器,我对此查询有疑问:
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
答案 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)!