2012-08-29 35 views
1

我用简单的例子来描述我的问题。比方说我的表结构是这样=>用mysql简单流程控制

create table A(
id INT(3) NOT NULL AUTO_INCREMENT PRIMARY_KEY, 
act DATETIME, 
act_reset INT(1) DEFAULT 0); 

我想写与条件,如果act_reset是true(所以如果不为0),那么更新列act DATETIME查询。

我已经试过像这样=>

IF act_reset THEN UPDATE A SET act=now() WHERE id=1 END IF; 

但这种语法是无效的,我怎么必须编写一个查询这种状况呢?谢谢

回答

2
UPDATE A SET act=now() WHERE id=1 AND act_reset <> 0 

这是你正在查询的查询?

使用If语句在MySQL:

IF act_reset <> 0 THEN 
    UPDATE A SET act=now() WHERE id=1 
END IF; 
+0

的确是这样,但有兴趣与if语句也是如此,因为我只是MySql中的一个begginer,并且想知道,感谢您的建议 – tnanoba

+0

@Tornike使用'IF'语句做这件事在SQL中是错误的。这没有意义。总是试着根据你想要处理的数据集来制定你的问题 - 不要以控制流量(即基于思维集合,而不是命令)来考虑。 –

1

你并不需要使用CASE语句或IF声明在这种情况下。只要移动状态If act_resetWHERE条款,像这样:

UPDATE A 
SET act = now() 
WHERE id = 1 
AND act_reset <> 0 
1

假设act_reset是一个变量名。你忘了semicolon,还需要使用DELIMITER

DELIMITER $$ 
IF act_reset <> 0 
THEN 
    UPDATE A SET act=now() 
    WHERE id = 1 $$ 
END IF$$ 
DELIMITER ; 

如果act_reset是列名,然后在它的不可能的情况下,与IF子句,而不是尝试这个办法:

UPDATE A 
    SET act = now() 
    WHERE id = 1 AND 
      act_reset <> 0;