针对如何使用Liquibase和mysql创建触发器来修复SQL语法错误和mysql创建触发器报错这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展DelphiUnidacMySQL从备注代码
针对如何使用Liquibase和mysql创建触发器来修复SQL语法错误和mysql创建触发器报错这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展Delphi Unidac MySQL从备注代码语法错误创建触发器、Liquibase Windows MySQL-找不到数据库驱动程序:com.mysql.cj.jdbc.Driver、MySQL - 在第 1 行附近创建触发器错误 1064、MySQL中的SQL语法错误等相关知识,希望可以帮助到你。
本文目录一览:- 如何使用Liquibase和mysql创建触发器来修复SQL语法错误(mysql创建触发器报错)
- Delphi Unidac MySQL从备注代码语法错误创建触发器
- Liquibase Windows MySQL-找不到数据库驱动程序:com.mysql.cj.jdbc.Driver
- MySQL - 在第 1 行附近创建触发器错误 1064
- MySQL中的SQL语法错误
如何使用Liquibase和mysql创建触发器来修复SQL语法错误(mysql创建触发器报错)
我正在为MySQL数据库设置第一个liquibase maven项目。已做好创建触发器的工作。
我相信这是liquibase和JDBC无法正确处理多语句SQL的问题,但我无法弄清缺少的内容。
这是我的pom依赖
<dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-parent</artifactId> <version>3.5.3</version> <type>pom</type> </dependency> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>3.5.3</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>3.6.3</version> </dependency>
这是我的liquibase包含文件
<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.0.xsd"> <changeSet id="event_horizon_1_0_0" author="lmtyler" dbms="mysql"> <sql> drop trigger if exists ai_event_approval; </sql> </changeSet> <changeSet id="event_horizon_1_0_1" author="lmtyler" dbms="mysql"> <sqlFile splitStatements="false" stripComments="false" endDelimiter="DONE" path="01__ai_event_approval.sql" relativeToChangelogFile="true" /> </changeSet></databaseChangeLog>
这是我的SQL文件
CREATE DEFINER =''evclient''@''%'' TRIGGER ai_event_approval AFTER INSERT ON event_approval FOR EACH rowbegin insert into event_approval_log (rowAction, actionTs, event, requestorEmail, requestReason, statusType, approverUserId, approverReason, lastChangTs) values (''I'', current_timestamp(6), new.event, new.requestorEmail, new.requestReason, new.statusType, new.approverUserId, new.approverReason, new.lastChangTs);end;# DONE
我期望通过设置splitStatements,stripComments和endDelimiter,我将获得liquibase来将整个SQL作为一个JDBC发送。
但是我收到这个错误
[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.6.3:update (default) on project event-horizon-mysql: Error setting up or running Liquibase: Migration failed for change set /Users/lmtyler/OneDrive - Walmart Inc/workspace/code/event-horizon/event-horizon-mysql/src/main/java/resources/liquibase/schema/triggers/02__au_event_approval.sql::event_horizon_1_0_1::lmtyler:[ERROR] Reason: liquibase.exception.DatabaseException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' at line 23 [Failed SQL: CREATE TRIGGER au_event_approval[ERROR] AFTER UPDATE[ERROR] ON event_approval[ERROR] FOR EACH row[ERROR] begin[ERROR] insert into event_approval_log (rowAction,[ERROR] actionTs,[ERROR] event,[ERROR] requestorEmail,[ERROR] requestReason,[ERROR] statusType,[ERROR] approverUserId,[ERROR] approverReason,[ERROR] lastChangTs)[ERROR] values (''U'',[ERROR] current_timestamp(6),[ERROR] new.event,[ERROR] new.requestorEmail,[ERROR] new.requestReason,[ERROR] new.statusType,[ERROR] new.approverUserId,[ERROR] new.approverReason,[ERROR] new.lastChangTs)]
答案1
小编典典一夜无眠,再加上@Jens建议,我终于明白了这个问题。
首先,如果您看到我的帖子,则该错误不是我所认为的SQL错误。我以为AFTER INSERT
是引发错误的原因,但这是AFTER UPDATE
关键是确保设置splitStatements:false
,endDelimiter
而无需设置。
这是两个有效的示例:
<changeSet id="event_horizon_1_0_1" author="lmtyler" dbms="mysql"> <sqlFile splitStatements="false" stripComments="false" path="01__ai_event_approval.sql" relativeToChangelogFile="true"/></changeSet>
与此SQL文件
CREATE DEFINER =''evclient''@''%'' TRIGGER ai_event_approval AFTER INSERT ON event_approval FOR EACH rowbegin insert into event_approval_log (rowAction, actionTs, event, requestorEmail, requestReason, statusType, approverUserId, approverReason, lastChangTs) values (''I'', current_timestamp(6), new.event, new.requestorEmail, new.requestReason, new.statusType, new.approverUserId, new.approverReason, new.lastChangTs);end;
这是使用SQL格式
--changeset lmtyler:event_horizon_1_0_1 dbms:mysql splitStatements:falseCREATE TRIGGER au_event_approval AFTER UPDATE ON event_approval FOR EACH rowbegin insert into event_approval_log (rowAction, actionTs, event, requestorEmail, requestReason, statusType, approverUserId, approverReason, lastChangTs) values (''U'', current_timestamp(6), new.event, new.requestorEmail, new.requestReason, new.statusType, new.approverUserId, new.approverReason, new.lastChangTs);end;
Delphi Unidac MySQL从备注代码语法错误创建触发器
正如@olivier提到的DELIMETER特定于HeidiSQL一样,我尝试删除delimeter并再次尝试但未解决问题,但是当我认为删除时,我所做的是从新代码中调用带有delimeter的旧代码。距离计,但我不是。
因此,正如第一篇评论中提到的@olivier一样,我将查询更改为此;
CREATE TRIGGER pdfdenemeu BEFORE INSERT ON denemetbl FOR EACH ROW BEGIN SET NEW.iki= CONCAT(NEW.bir,'.pdf'); END;
工作完美。 @olivier谢谢,我欠你一个。
Liquibase Windows MySQL-找不到数据库驱动程序:com.mysql.cj.jdbc.Driver
将驱动程序更改为
hamcrest
或更新您的mysql依赖项。我相信您的依存关系包含软件包mockito-kotlin
,但mysql updated的库包含新软件包。
例如尝试使用this one。
MySQL - 在第 1 行附近创建触发器错误 1064
如何解决MySQL - 在第 1 行附近创建触发器错误 1064?
我正在尝试在 MysqL 8.0 数据库上创建一个新触发器。 通过 MysqL Workbench 申请时出现以下错误...
错误 1064:您的 sql 语法有错误;检查手册 对应于您的 MysqL 服务器版本的正确语法 在第 1 行靠近 '''' 使用
这里是触发脚本...
DROP TRIGGER IF EXISTS tr_set_location_engagement;
DELIMITER $$
CREATE TRIGGER tr_set_location_engagement
BEFORE INSERT ON v2_nc_nip_cap_engagement
FOR EACH ROW
BEGIN
SET NEW.water_system_id = (SELECT water_system_id FROM v2_nc_registered_water_systems WHERE NEW.system_name = water_system_name);
SET NEW.province_id = (SELECT province_id FROM v2_nc_province WHERE NEW.province_name = province_name);
SET NEW.island_id = (SELECT island_id FROM v2_nc_island WHERE NEW.island_name = island_name);
SET NEW.area_council_id = (SELECT area_council_id FROM v2_nc_area_council WHERE NEW.area_council_name = area_council_name);
END $$
DELIMITER ;
非常感谢任何帮助。
解决方法
感谢大家的帮助。问题是我在 MySQL Workbench 中使用触发器(对象)编辑器来应用触发器。当我在 Workbench 中使用 SQL IDE 应用触发器时,触发器应用成功。
MySQL中的SQL语法错误
我正在从以下位置向我的MySQL表插入值php
:
$journey = $_POST[''way''];$from = $_POST[''from''];$to = $_POST[''to''];$dpdt = $_POST[''dp_date''];$rtdt = $_POST[''rt_date''];$fare = $_POST[''fare''];$sql = "insert into tours set " . "journey=''$journey'', from=''$from'', to=''$to'', dp_date=CAST(''$dpdt'' AS DATE), " . "rt_date=CAST(''$rtdt'' AS DATE), fare=''$fare''";
尝试echo
为$sql
我得到的输出为:
insert into tours set journey=''round'', from=''Aurangabad'', to=''Kashmir'', dp_date=CAST(''27-08-2013'' AS DATE), rt_date=CAST(''21-08-2013'' AS DATE), fare=''2500''
但我不断收到相同的错误消息:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''from=Aurangabad, to=''Kashmir'', dp_date=CAST(''27-08-2013'' AS DATE), rt_date=CAST('' at line 1
即使我尝试删除''
列名的值。
我使用相同的语法插入数据,并且工作正常。
这怎么了
为什么MySQL对于这种可怕的错误没有给出适当的错误?
答案1
小编典典`from`=''$from'', `to`=''$to''
FROM
是保留字,请在其周围使用反引号。
关于如何使用Liquibase和mysql创建触发器来修复SQL语法错误和mysql创建触发器报错的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Delphi Unidac MySQL从备注代码语法错误创建触发器、Liquibase Windows MySQL-找不到数据库驱动程序:com.mysql.cj.jdbc.Driver、MySQL - 在第 1 行附近创建触发器错误 1064、MySQL中的SQL语法错误等相关知识的信息别忘了在本站进行查找喔。
本文标签: