2017-10-20 59 views
1

嗨,我想創建一個MySQL腳本,我可以運行,只要我需要更新我的數據庫。該腳本創建一個表,然後執行一些存儲過程。刪除程序,如果存在mysql

DELIMITER $$ 

CREATE TABLE IF NOT EXISTS tbl_name (
    col1 bigint(20) NOT NULL AUTO_INCREMENT, 
    col2 varchar(255) NOT NULL, 
    col3 varchar(64) NOT NULL, 
    col4 datetime DEFAULT NULL, 
    PRIMARY KEY (`col1 `), 
    UNIQUE KEY col2 (`col2`) 
) ENGINE=InnoDB AUTO_INCREMENT=572 DEFAULT CHARSET=utf8$$ 

CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username 
VARCHAR(255)) 
BEGIN 
    DECLARE var1 VARCHAR(64); 
    DECLARE expirationDate DATETIME; 

    SET var1 = 12345; 
    SET expirationDate = DATE_ADD(NOW(), INTERVAL 30 SECOND); 

    REPLACE INTO tbl_name (col2, col3, col4) VALUES (someval, var1, expirationDate); 
END$$ 

DELIMITER ; 

當我第一次運行腳本時,它創建了表並在MySQL Workbench中執行了存儲過程。當我第二次運行同樣的東西時,我得到了錯誤1304程序已經存在。

我在線查看here關於刪除程序,然後再次創建。但是,當我創建過程之前,進入下面的命令,我就CREATE命令得到一個錯誤代碼爲1064

DROP PROCEDURE IF EXISTS myproc; 
CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username 
    VARCHAR(255)) 
. 
. 
. 

我很新的MySQL和不知道如何,如果它已經存在執行過程。

任何幫助,將不勝感激。

回答

1

由於您更改爲DELIMITER $$您需要在每個語句末尾使用該分隔符,直到您將其更改回來。

DROP PROCEDURE和CREATE PROCEDURE是單獨的語句,每個語句都需要自己的語句分隔符。

DROP PROCEDURE IF EXISTS myproc $$ 

請注意上面一行末尾的分隔符。

CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username 
    VARCHAR(255)) 
. 
. 
. 
END $$ 

而在整個CREATE PROCEDURE語句的末尾還有另一個分隔符。

+0

嘿@Bill,謝謝你的回覆。我已經在每個proc的末尾放置分隔符,然後將其更改回分號';' – Naphstor

+0

@Naphstor,請參閱我上面編輯的答案進行一些說明。 –

+0

明白了,謝謝。這樣可行。 – Naphstor