当前位置: 首页 > article >正文

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 语法。

http://www.kler.cn/a/447140.html

相关文章:

  • spring学习(spring-DI(setter注入、构造器注入、自动装配方式))
  • 内网IP段介绍与汇总
  • mysql的事务控制和数据库的备份和恢复
  • clickhouse-数据库引擎
  • 海外外卖APP开发新方向:基于同城外卖系统源码的多元化解决方案
  • Unbuntu下怎么生成SSL自签证书?
  • 【DevOps工具篇】PM(Project Management)之Redmine
  • linux zip unzip 命令的使用
  • LeetCode 844. 比较含退格的字符串 (C++实现)
  • 在 Spark 上实现 Graph Embedding
  • Java编程基础与高级应用:从入门到实践
  • 【JavaEE初阶】线程安全问题
  • 【MongoDB】使用 MongoDB 存储日志、审批、MQ等数据的案例及优点
  • R机器学习:朴素贝叶斯算法的理解与实操
  • SpringBoot项目Jar包使用systemctl运行
  • STM32F407寄存器点灯
  • 批量提取zotero的论文构建知识库做问答的大模型(可选)——含转存PDF-分割统计PDF等
  • 【react项目】从零搭建react项目[nodejs安装]
  • 我的2024年度总结
  • 【AIGC-ChatGPT进阶副业提示词】末日生存指南 2.0:疯狂科学家的荒诞智慧
  • C vs C++: 一场编程语言的演变与对比
  • 【什么是事务?】
  • ISICDM 2024|思腾合力受邀参加第七届图像计算与数字医学国际研讨会
  • Clickhouse(Centos)
  • QString转const char* bug
  • vue中如何实现商品多规格添加(后台商城管理系统)