首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MySQL DELIMITER $$ 語法錯誤:非 SQL 標準指令,需在客戶端工具執行

     編輯:程式設計綜合問答

錯誤原因

DELIMITER 是 MySQL 客戶端(mysql、MySQL Workbench、Navicat 等)**工具指令**,並非 SQL 標準語句。若直接在 JDBC、Hibernate、程式碼中執行 DELIMITER $$,伺服器會報 1064 syntax error。

正確使用場景

  • 在 **MySQL 命令列** 或 **圖形化工具** 的腳本編輯區塊中,定義預存程序/觸發器時使用:
DELIMITER $$
CREATE PROCEDURE my_proc()
BEGIN
  SELECT 1;
  SELECT 2;
END$$
DELIMITER ;

程式碼中執行預存程序

Java/JDBC 中**不需要** DELIMITER,直接呼叫:

CallableStatement cs = conn.prepareCall("{CALL my_proc()}");
cs.execute();

常見誤區

  • 將含 DELIMITER 的完整腳本複製到程式碼字串中執行 → 錯誤。
  • 以為 DELIMITER 是 SQL 一部分 → 否,它只是告訴客戶端「語句結束符暫時改為 $$」。

解決方法

  1. 移除程式碼中的 DELIMITER 行。
  2. 若需批次執行多條語句,使用 Statement.executeLargeUpdate() (JDBC 4.2+) 或分批 addBatch()/executeBatch()。
  3. 預存程序建立腳本保留在 .sql 檔,由部署腳本/遷移工具(Flyway、Liquibase)執行。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved