1

我有一张这样的桌子:

+-------+------------+------+-----+---------+-------+
| Field | Type       | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+-------+
| ID    | bigint(20) | NO   | PRI | NULL    |       |
| view  | bigint(20) | NO   |     | NULL    |       |
+-------+------------+------+-----+---------+-------+

是否可以使用 SQL 的 IF-ELSE 语句来做到这一点?

  1. 检查表中是否有 ID=1 行
  2. 如果有,将视图列增加 1。
  3. 如果没有,则向 ID=1 的表插入新行

它应该是这样的:

IF((SELECT COUNT(ID) FROM wp_viewcount WHERE ID=1) == 0)
BEGIN
INSERT INTO wp_viewcount VALUES (1,1)
END
ELSE
BEGIN
UPDATE wp_viewcount SET view=view+1 WHERE ID=1
END
4

3 回答 3

3

以下 SQL 语句将通过使用on duplicate key语法产生您想要的 IF - ELSE 逻辑。

insert into wp_viewcount values(1,1) on duplicate key update view=view+1;
于 2012-06-12T17:47:46.510 回答
2

您只能if在存储过程中使用 MySQL。例如:

DELIMITER //

CREATE PROCEDURE `test_procedure` (IN wp_id INT)
BEGIN
IF( (SELECT COUNT(*) FROM wp_viewcount WHERE id = wp_id)<1) THEN
    INSERT INTO wp_viewcount(id,view) VALUES (wp_id,1);
ELSE
    UPDATE wp_viewcount SET view=view+1 WHERE ID=wp_id;
END IF;
END //

鉴于您的用例,MySQL 的INSERT ... ON DUPLICATE KEY UPDATE.

于 2012-06-12T17:38:51.567 回答
1

为什么不使用

if not exists (select * from wp_viewcount where id = 1)
begin
    --insert logic
end
else
begin
    --update logic
end
于 2012-06-12T17:31:18.630 回答