MySQL 触发器 Liquibase

标签 mysql triggers liquibase

我已经设置了 liquibase。我目前想要加载 4-5 个触发器,每个触发器都存储在单独的文件中。所有触发器都位于单独的表上。但是我不断收到此错误:

SEVERE 9/17/13 12:05 PM:liquibase: Change Set migrations/09-16-2013-16-10.sql::129 failed. Error: Error executing SQL DELIMITER $$

DELIMITER $$
CREATE TRIGGER `UPDATE_tableA` BEFORE UPDATE on `tableA`
FOR EACH ROW BEGIN
IF (OLD.ColumnA = NEW.ColumnA) and 
  ((OLD.ColumnB is null and NEW.ColumnB is null) or (OLD.ColumnB = NEW.ColumnB)) and 
  ((OLD.ColumnB is null and NEW.ColumnB is null) or (OLD.ColumnB = NEW.ColumnB)) and 
  ((OLD.ColumnC is null and NEW.ColumnC is null) or (OLD.ColumnC = NEW.ColumnC))  
  THEN
    SET NEW.ColumnA = 0;
    SET NEW.ColumnB = NULL;
    SET NEW.ColumnB = NULL;
    SET NEW.ColumnC = NULL;
END IF;
END$$
DELIMITER ;

DELIMITER $$
CREATE TRIGGER `UPDATE_tableB` BEFORE UPDATE on `tableB`
FOR EACH ROW BEGIN
IF (OLD.ColumnA = NEW.ColumnA) and 
  ((OLD.ColumnB is null and NEW.ColumnB is null) or (OLD.ColumnB = NEW.ColumnB)) and 
  ((OLD.ColumnB is null and NEW.ColumnB is null) or (OLD.ColumnB = NEW.ColumnB)) and 
  ((OLD.ColumnC is null and NEW.ColumnC is null) or (OLD.ColumnC = NEW.ColumnC))  
  THEN
    SET NEW.ColumnA = 0;
    SET NEW.ColumnB = NULL;
    SET NEW.ColumnB = NULL;
    SET NEW.ColumnC = NULL;
END IF;
END$$
DELIMITER ;

最佳答案

'endDelimiter' 是一个正则表达式,所以试试这个

<sqlFile endDelimiter="\$\$" path="..."/>

关于MySQL 触发器 Liquibase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18858465/

相关文章:

powershell - New-ScheduledTaskTrigger -AtLogon重复

sql - 添加约束以防止 SQL 更新触发器中的重复项

java - 在构建时自动更新 Liquibase 的变更日志

oracle - 如何使用 Liquibase 更改 Oracle 和 HSQL DB 上的 View (HSQLDB 不支持 ReplaceIfExists)

mysql - MariaDB 使用 PHP PDO 存储与原始字段值不同的 varbinary 字段

mysql - SQL 包含相关表中 id 不存在的结果

php - 如何取消设置/销毁从 mysql 检索数据的 session

mysql - 尝试更新主键值时出错

MySQL触发器每年插入一次

liquibase - jhipster 使用 prod 配置文件运行嵌入式 jar - liquibase 问题