mysql - 如果 mysql 中存在则删除过程

标签 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 ;

当我第一次运行脚本时,它创建了表并在 MySQL Workbench 中执行了存储过程。当我第二次运行同样的东西时,我得到错误 1304 procedure already exists。

我在网上看here关于删除程序然后重新创建。但是当我在创建过程之前输入以下命令时,我在 CREATE 命令上收到错误代码 1064。

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

我是 mysql 的新手,不确定如何执行该过程(如果它已经存在)。

如有任何帮助,我们将不胜感激。

最佳答案

由于您更改为 DELIMITER $$,您需要在每个语句的末尾使用该分隔符,直到您将其更改回来。

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

DROP PROCEDURE IF EXISTS myproc $$

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

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

整个 CREATE PROCEDURE 语句末尾的另一个分隔符。

关于mysql - 如果 mysql 中存在则删除过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856261/

相关文章:

php - PDO 多个内部联接似乎是循环的

python - 如何使用python计算SQL数据库中的记录数

javascript - 测试通过后如何运行数据库查询?

c# - 如何在存储过程中遍历数组,返回数组?

c# - 如何在 Entity Framework 中运行存储过程

MySQL 查询从一个表中选择一组 ID,具体取决于对第二个表的查询

mysql - 不正确的日期值 : '0000-00-00' for column 'req_dt' at row in mysql

触发器执行后 MySQL 服务器重启

mysql - 单表 SELF JOIN 备选方案/除外/相交

sql - 如何在一个查询中使用两个 COUNT