嗨,我正在尝试创建一个 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工作台中执行了存储过程。当我第二次运行同样的事情时,我得到错误 1304 过程已经存在。
我在这里在线查看了有关删除程序然后再次创建的信息。但是当我在创建过程之前输入以下命令时,我在代码为 1064 CREATE
命令上出现错误。
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 语句末尾的另一个分隔符。