IF search_condition THEN statement_list
    [ELSEIF search_condition THEN statement_list] ...
    [ELSE statement_list]
END IF
        存储程序的IF语句实现了一个基本的条件构造。
笔记
          还有一个function,它与这里描述的
          语句不同。请参阅
          第 12.5 节,“流量控制功能”。该
          语句可以有
          , , 和
          从句,并以 结束
          。
IF()
          IF
          IFTHENELSEELSEIFEND IF
        如果给定的search_condition计算结果为真,则执行相应的THENor
        ELSEIF子句
        statement_list。如果没有
        search_condition匹配项,则执行该
        ELSE子句
        statement_list。
      
        每个statement_list由一个或多个 SQL 语句组成;statement_list不允许
      为空
        。
        与存储程序中使用的IF ... END IF所有其他流控制块一样,块必须以分号结束,如本例所示:
      
DELIMITER //
CREATE FUNCTION SimpleCompare(n INT, m INT)
  RETURNS VARCHAR(20)
  BEGIN
    DECLARE s VARCHAR(20);
    IF n > m THEN SET s = '>';
    ELSEIF n = m THEN SET s = '=';
    ELSE SET s = '<';
    END IF;
    SET s = CONCAT(n, ' ', s, ' ', m);
    RETURN s;
  END //
DELIMITER ;
        与其他流程控制结构一样,IF ... END
        IF块可以嵌套在其他流程控制结构中,包括其他IF
        语句。每个IF必须以其自身END IF后跟一个分号结束。您可以使用缩进使嵌套的流程控制块更容易被人类阅读(尽管 MySQL 不需要这样做),如下所示:
      
DELIMITER //
CREATE FUNCTION VerboseCompare (n INT, m INT)
  RETURNS VARCHAR(50)
  BEGIN
    DECLARE s VARCHAR(50);
    IF n = m THEN SET s = 'equals';
    ELSE
      IF n > m THEN SET s = 'greater';
      ELSE SET s = 'less';
      END IF;
      SET s = CONCAT('is ', s, ' than');
    END IF;
    SET s = CONCAT(n, ' ', s, ' ', m, '.');
    RETURN s;
  END //
DELIMITER ;
        在此示例中,仅当不等于
        IF时才评估内部。
nm