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

前提:

在写数据库作业时候,使用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 语法。
相关推荐
大尚来也1 天前
老项目 PHP 5.6 升级 PHP 8 完整迁移步骤与兼容坑汇总
android·adb
寒水馨1 天前
macOS下载、安装scrcpy-v4.1(附安装包scrcpy-macos-aarch64-v4.1.tar.gz)
macos·adb·手机控制·scrcpy·投屏软件·android投屏·屏幕镜像
—Miss. Z—1 天前
计算机二级MySQL——简单应用题(事件&视图)
android·mysql·adb
小飞侠在吗2 天前
【MySQL 排错】Navicat 连接 localhost 报 2002 (10061) 完整排查记录(Windows + MySQL 8.4 用户模式)
windows·mysql·adb
2501_916008893 天前
HTTPS 抓包遇到证书绑定怎么办,使用 TraceEagle 解除 App 证书校验
网络协议·计算机网络·http·网络安全·ios·adb·https
Mico183 天前
MySQL 8.0.35 基于GTID 主从复制安装增强半同步复制
android·mysql·adb
IT瑞先生4 天前
Docker快速部署Mysql的三种方法——实操篇
mysql·adb·docker
C++、Java和Python的菜鸟4 天前
第5章 后端Web基础 (MySQL基础)
前端·mysql·adb
Mico185 天前
MySQL 8.0.35 GTID 主从复制搭建-基于GITD
android·mysql·adb
bwz999@88.com5 天前
Ubuntu24.04.4安装mysql8.0.46
adb