Mybatis中使用MySql触发器报错:You have an error in your SQL syntax; ‘DELIMITER $$

ops/2024/12/23 21:08:06/

前提:

在写数据库作业时候,使用SpringBoot2.7.x+Mybatis-plus+Mysql8.0开发,其中使用MySQL的触发器时报以下错误:

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 'DELIMITER $$ create trigger cleanup after update on manual_reco' at line 1

错误是因为 MySQL 不识别 DELIMITER 命令,通常这是因为你在不支持 DELIMITER 命令的环境中执行 SQL 语句。

DELIMITER 命令的作用:

在 MySQL 命令行客户端(比如 MySQL CLI 或者 MySQL Workbench)中,DELIMITER 命令用来改变 SQL 语句的结束符,默认是 但在定义存储过程、触发器等时,内部可能会使用 ;,这时需要修改结束符。例如,将结束符改为 $$,这样 MySQL 就可以区分语句结束和触发器内部的分号。

错误原因

  1. 环境不支持 DELIMITER:一些图形化的 SQL 编辑器或者数据库管理工具(比如 phpMyAdmin、Navicat、DBeaver 等)不支持 DELIMITER 命令,因此你在这些环境中执行时会报错。

  2. 在 SQL 文件中使用 DELIMITER:如果你将 SQL 语句放在一个 SQL 文件中,并直接通过数据库管理工具执行(而不是通过命令行工具),DELIMITER 也可能无法正常工作。

解决方法

  1. 避免使用 DELIMITER: 如果你在图形化的 SQL 编辑器中执行 SQL,通常不需要使用 DELIMITER。你可以直接去掉 DELIMITER 语句,将触发器定义写成一个普通的 SQL 语句:

    CREATE TRIGGER cleanup AFTER UPDATE ON manual_record FOR EACH ROW BEGIN -- 触发器逻辑 DELETE FROM manual_record WHERE is_leave = 1 AND out_time < DATE_SUB(NOW(), INTERVAL 1 YEAR); END;

  2. 通过命令行执行 SQL 文件: 如果你通过 MySQL 命令行工具执行 SQL 文件,可以在文件中使用 DELIMITER 命令。如果你使用的是其他工具,确保该工具支持 DELIMITER 命令,或者根据该工具的要求调整 SQL 语法。


总结

  • 命令行工具:可以使用 DELIMITER 命令修改语句结束符,便于定义触发器和存储过程。
  • 图形化工具:避免使用 DELIMITER,直接使用常规的 SQL 语句。
  • 只要遇到这个问题,首先确认执行 SQL 的环境是否支持 DELIMITER 语法。

http://www.ppmy.cn/ops/144391.html

相关文章

Tool之Excalidraw:Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略

Tool之Excalidraw&#xff1a;Excalidraw(开源的虚拟手绘风格白板)的简介、安装和使用方法、艾米莉应用之详细攻略 目录 Excalidraw 简介 1、Excalidraw 的主要特点&#xff1a; Excalidraw 安装和使用方法 1、Excalidraw的安装 T1、使用 npm 安装&#xff1a; T2、使用 …

如何利用Python爬虫获得1688按关键字搜索商品

在当今的数字化时代&#xff0c;数据已成为企业竞争的核心资源。对于电商行业来说&#xff0c;了解市场动态、分析竞争对手、获取商品信息是至关重要的。Python作为一种强大的编程语言&#xff0c;其丰富的库和框架使得数据爬取变得简单易行。本文将介绍如何使用Python爬虫技术…

写SQL太麻烦?免费搭建 Text2SQL 应用,智能写 SQL | OceanBase AI 实践

自OceanBase 4.3.3版本推出以来&#xff0c;向量检索的能力受到了很多客户的关注&#xff0c;也纷纷表达希望OB能拓展更多 多模数据库大模型 的AI应用实践。 在上篇文章 &#x1f449; OceanBase LLM&#xff0c;免费构建你的专属 AI 助手 &#xff0c;我们介绍了如何去搭建一…

深度学习试题及答案解析(一)

1. 一幅256*256的图像&#xff0c;若灰度级数为16&#xff0c;则存储它所需的比特数是&#xff08;&#xff09; 2. 在深度学习中&#xff0c;涉及大量的矩阵相乘&#xff0c;现在需要计算三个稠密矩阵A&#xff0c;B&#xff0c;C的乘积ABC,假设三个矩阵的尺寸分别为m∗n&…

AI Chat API 对接说明

AI Chat API 对接说明 我们知道&#xff0c;市面上一些问答 API 的对接还是相对没那么容易的&#xff0c;比如说 OpenAI 的 Chat Completions API&#xff0c;它有一个 messages 字段&#xff0c;如果要完成连续对话&#xff0c;需要我们把所有的上下文历史全部传递&#xff0…

Jenkins搭建并与Harbor集成上传镜像

Jenkins介绍 Jenkins 是一个开源的自动化服务器&#xff0c;广泛用于持续集成&#xff08;CI&#xff09;和持续交付&#xff08;CD&#xff09;的实践中。它帮助开发人员自动化构建、测试和部署过程&#xff0c;从而提高开发效率、代码质量和项目交付速度。通过丰富的插件支持…

道路运输企业安全生产管理人员安全考核试题

道路运输企业安全生产管理人员安全考核试题 一、单选题 题干&#xff1a;在公交车行驶过程中&#xff0c;乘客王某因与驾驶员发生矛盾&#xff0c;遂殴打驾驶员并抢夺方向盘&#xff0c;造成其他乘客受轻微伤&#xff0c;依照《中华人民共和国刑法》的规定&#xff0c;王某触…

C# cad启动自动加载启动插件、类库编译 多个dll合并为一个

可以通过引用costura.fody的包&#xff0c;编译后直接变为一个dll 自动加载写入注册表、激活码功能: 【CAD二次开发教程-实例18-启动加载与自动运行-哔哩哔哩】 https://b23.tv/lKnki3f https://gitee.com/zhuhao1912/cad-atuo-register-and-active