如果存在于mysql中,则删除过程

Nap*_*tor 6 mysql database stored-procedures

您好我正在尝试创建一个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 ;
Run Code Online (Sandbox Code Playgroud)

当我第一次运行脚本时,它创建了表并在MySQL Workbench中执行了存储过程.当我第二次运行相同的东西时,我得到错误1304程序已经存在.

我在网上看了一下关于删除程序然后重新创建.但是当我在创建过程之前输入以下命令时,我在CREATE代码为1064的命令上出错.

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

我是mysql的新手,如果已存在则不确定如何执行该过程.

任何帮助,将不胜感激.

Bil*_*win 8

由于您已更改为DELIMITER $$,因此需要在每个语句的末尾使用该分隔符,直到您将其更改为止.

DROP PROCEDURE和CREATE PROCEDURE是单独的语句,每个语句都需要自己的语句分隔符.

DROP PROCEDURE IF EXISTS myproc $$
Run Code Online (Sandbox Code Playgroud)

请注意上面一行末尾的分隔符.

CREATE DEFINER=`root`@`localhost` PROCEDURE `myproc`(IN username 
    VARCHAR(255))
.
.
.
END $$
Run Code Online (Sandbox Code Playgroud)

并在整个CREATE PROCEDURE语句结束时使用另一个分隔符.