我正在为一个博客做一个每日计数器,我对这个查询有问题:
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服务器版本对应的手册,以获得使用
的正确语法。near 'IF EXISTS ' SELECT * FROM tableA WHERE blog_id=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
我怀疑你正在寻找insert into on duplicate key update
语法
从手册:
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html12.2.5.3。插入……ON DUPLICATE KEY UPDATE语法
如果您指定ON DUPLICATE KEY UPDATE,并且插入的一行将导致在UNIQUE索引或PRIMARY KEY中重复的值,旧的UPDATE
你的查询应该看起来更像下面的例子:
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
在我看来你真正想要的是这个(注意,它只适用于MySQL)!