MariaDB和flyway语法错误,但不在JAVA中
我正在尝试执行迁移SQL脚本。 我使用Flyway来运行脚本。但是,有些脚本失败了 失败的脚本:MariaDB和flyway语法错误,但不在JAVA中,java,mysql,mariadb,command-line-interface,flyway,Java,Mysql,Mariadb,Command Line Interface,Flyway,我正在尝试执行迁移SQL脚本。 我使用Flyway来运行脚本。但是,有些脚本失败了 失败的脚本: 我真的无法向自己解释为什么会发生这种情况。事实证明,问题在于不使用分隔符。 为了使语句能够成功解析,分隔符应按如下方式使用: DELIMITER // CREATE TRIGGER my_cool_trigger BEFORE UPDATE ON my_db FOR EACH ROW BEGIN DECLARE n INT; SET n = (SELECT COUNT(uuid) F
我真的无法向自己解释为什么会发生这种情况。事实证明,问题在于不使用分隔符。 为了使语句能够成功解析,分隔符应按如下方式使用:
DELIMITER //
CREATE TRIGGER my_cool_trigger
BEFORE UPDATE ON my_db
FOR EACH ROW
BEGIN
DECLARE n INT;
SET n = (SELECT COUNT(uuid) FROM my_db WHERE uuid != NEW.uuid AND a_uuid = NEW.a_uuid AND number = NEW.number AND event_id IS NULL AND t_begin < NEW.t_end AND t_end > NEW.t_begin);
IF n > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Oof. ERROR!!!';
END IF;
END//
DELIMITER ;
它在Java中工作的原因是Java prepareStatement似乎添加了自定义分隔符或其他东西…您所说的*通过Java*执行相同的脚本是什么意思?Flyway也是Java。它们是作为预备语句运行的。它们是什么?准备好的语句的具体内容是什么?它们=脚本中包含的语句。显示您的Java代码。
connection.prepareStatement(sql).execute();
DELIMITER //
CREATE TRIGGER my_cool_trigger
BEFORE UPDATE ON my_db
FOR EACH ROW
BEGIN
DECLARE n INT;
SET n = (SELECT COUNT(uuid) FROM my_db WHERE uuid != NEW.uuid AND a_uuid = NEW.a_uuid AND number = NEW.number AND event_id IS NULL AND t_begin < NEW.t_end AND t_end > NEW.t_begin);
IF n > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT='Oof. ERROR!!!';
END IF;
END//
DELIMITER ;