MySQL过程中的多个IF语句

时间:2016-02-25 08:21:01

标签: mysql stored-procedures

我有一个程序调用,它将更新客户端的数据库。它看起来像这样:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `update_database`()
begin

set @current_version := (select version from testrmaomo.dbase);

-- Only update if v4
if @current_version = '4' then 

    ALTER TABLE `testrmaomo`.`notification` 
    ADD COLUMN `senderID` VARCHAR(100) NULL COMMENT '' AFTER `ClientSMS`,
    ADD COLUMN `ClickatellUser` VARCHAR(100) NULL COMMENT '' AFTER `senderID`,
    ADD COLUMN `ClickatellPass` VARCHAR(100) NULL COMMENT '' AFTER `ClickatellUser`,
    ADD COLUMN `ClickatellApiID` VARCHAR(100) NULL COMMENT '' AFTER `ClickatellPass`;

    UPDATE testrmaomo.dbase SET Version = '5';

end if;

-- Only update if v5
if @current_version = '5' then 

    CREATE TABLE `testrmaomo`.`client` (
    `ID` INT NOT NULL AUTO_INCREMENT COMMENT '',
    `Color` VARCHAR(45) NULL COMMENT '',
    `Client` VARCHAR(100) NULL COMMENT '',
    `Address` VARCHAR(400) NULL COMMENT '',
    `Telephone` VARCHAR(45) NULL COMMENT '',
    `Mobile` VARCHAR(45) NULL COMMENT '',
    `Email` VARCHAR(45) NULL COMMENT '',
    PRIMARY KEY (`ID`)  COMMENT '');

    UPDATE testrmaomo.dbase SET Version = '6';

end if;

end$$
DELIMITER ;

我的逻辑是,如果用户的数据库是v4,它应该同时运行if语句,因为第一个if语句将更新为v5,这应该满足第二个if语句的要求。如果客户端已经在v5,它将跳过第一个if语句,并直接转到第二个。

由于某种原因,当我调用该过程时,它只会运行第一个if语句,并且只有一次调用该过程才会运行第二个if。

有没有办法可以让它在一次通话中运行?

2 个答案:

答案 0 :(得分:1)

你的@current_version没有更新,当然是4.

if @current_version = '4' then 
...
    UPDATE testrmaomo.dbase SET Version = '5';

--just update your variable
    set @current_version = 5;
end if;

答案 1 :(得分:0)

.images{
    background:rgba(14, 11, 10, 0.8);
    display:block;
    flex:10;
}
.images img{
    width:100%;
}

你应该在第一个语句中将当前的_version变量更改为5