欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SQLyog中DELIMITER執(zhí)行存儲過程時出現前置縮進問題的解決方法

 更新時間:2025年05月03日 09:40:42   作者:星途碼客  
在SQLyog中執(zhí)行存儲過程時出現的前置縮進問題,實際上反映了SQLyog對SQL語句解析的一個特殊行為,本文給大家介紹了詳細解釋和解決方案,需要的朋友可以參考下

問題根源

  1. SQLyog的語句分隔邏輯

    • SQLyog默認會根據分號(;)和換行自動分隔SQL語句

    • 當代碼有縮進時,SQLyog可能錯誤地將縮進后的內容識別為新的SQL語句

  2. DELIMITER的敏感性

    • DELIMITER //命令必須獨立一行且無前導空格

    • 任何縮進都會導致SQLyog將其視為普通文本而非指令

  3. 存儲過程體內的語句

    • 過程體內的縮進不會影響執(zhí)行(因為是作為整體解析)

    • 但過程體外的命令(如DELIMITER)必須無縮進

正確寫法示例

-- 必須頂格寫(無縮進)
DELIMITER //
CREATE PROCEDURE grant_role_to_all_users()
BEGIN
    -- 這里面的縮進不會影響執(zhí)行
    DECLARE finished INTEGER DEFAULT 0;
    DECLARE user_host VARCHAR(255);
    
    DECLARE user_cursor CURSOR FOR 
        SELECT CONCAT('`',USER,'`@`',HOST,'`') 
        FROM mysql.user 
        WHERE USER NOT IN ('root','mysql.sys','mysql.session','mysql.infoschema');
    
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = 1;
    
    OPEN user_cursor;
    
    get_user: LOOP
        FETCH user_cursor INTO user_host;
        IF finished = 1 THEN LEAVE get_user; END IF;
        
        SET @grant_sql = CONCAT('GRANT "public_role" TO ', user_host);
        PREPARE stmt FROM @grant_sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
        
        SET @default_sql = CONCAT('SET DEFAULT ROLE "public_role" FOR ', user_host);
        PREPARE stmt FROM @default_sql;
        EXECUTE stmt;
        DEALLOCATE PREPARE stmt;
    END LOOP get_user;
    
    CLOSE user_cursor;
END//
-- 必須頂格寫(無縮進)
DELIMITER ;

永久解決方案

  1. 關閉SQLyog的自動分隔功能

    • 菜單欄 → 工具 → 首選項 → 查詢編輯器

    • 取消勾選"自動分隔SQL語句"

  2. 使用批處理執(zhí)行模式

    • 全選所有代碼(包括DELIMITER)

    • 按 Ctrl+Shift+F9(批處理執(zhí)行)而非普通執(zhí)行

  3. 檢查編輯器設置

    • 確保沒有開啟"智能縮進"或"語法感知縮進"功能

為什么命令行不受影響?

MySQL原生命令行客戶端:

  • 完全依賴DELIMITER指令

  • 不關心縮進和格式

  • 直到遇到定義的結束符(如//)才會執(zhí)行

而SQLyog等圖形工具為提高易用性,會嘗試自動解析SQL結構,導致對格式敏感。

最佳實踐建議

  1. 存儲過程創(chuàng)建語句建議:

    • DELIMITER和END//必須頂格

    • 過程體內的縮進保持一致性(4空格或1個tab)

  2. 復雜過程建議:

-- 頂格
DELIMITER //
CREATE PROCEDURE proc_name()
BEGIN
    -- 縮進內容
    SELECT * FROM table;
END//
-- 頂格
DELIMITER ;

保存為腳本文件后通過命令行執(zhí)行:

mysql -u user -p db_name < procedure.sql

到此這篇關于SQLyog中DELIMITER執(zhí)行存儲過程時出現的前置縮進問題的解決方法的文章就介紹到這了,更多相關SQLyog DELIMITER出現前置縮進內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 使用innodb_force_recovery解決MySQL崩潰無法重啟問題

    使用innodb_force_recovery解決MySQL崩潰無法重啟問題

    這篇文章主要介紹了使用innodb_force_recovery解決MySQL崩潰無法重啟問題,這只一個成功案例,并不是萬能的解決方法,需要酌情考慮,需要的朋友可以參考下
    2015-05-05
  • MySQL數據庫中刪除重復記錄簡單步驟

    MySQL數據庫中刪除重復記錄簡單步驟

    這篇文章主要給大家介紹了關于MySQL數據庫中刪除重復記錄的相關資料,在使用數據庫時,出現重復數據是常有的情況,但有些情況是允許數據重復的,而有些情況是不允許的,當出現不允許的情況,我們就需要對重復數據進行刪除處理,需要的朋友可以參考下
    2023-08-08
  • mysql 5.7 數據庫安裝步驟個人總結

    mysql 5.7 數據庫安裝步驟個人總結

    這篇文章主要介紹了mysql 數據庫安裝步驟個人總結,需要的朋友可以參考下
    2017-09-09
  • IOS 數據庫升級數據遷移的實例詳解

    IOS 數據庫升級數據遷移的實例詳解

    這篇文章主要介紹了IOS 數據庫升級數據遷移的實例詳解的相關資料,這里提供實例幫助大家解決數據庫升級及數據遷移的問題,需要的朋友可以參考下
    2017-07-07
  • mysql常用函數與視圖索引全面梳理

    mysql常用函數與視圖索引全面梳理

    這篇文章主要介紹了mysql的常用函數與視圖索引的特點與作用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2022-10-10
  • 實現數據庫水平切分的兩個思路

    實現數據庫水平切分的兩個思路

    今天小編就為大家分享一篇關于實現數據庫水平切分的兩個思路,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • MySQL8.0.21.0社區(qū)版安裝教程(圖文詳解)

    MySQL8.0.21.0社區(qū)版安裝教程(圖文詳解)

    這篇文章主要介紹了MySQL8.0.21.0社區(qū)版安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • MySQL NDB Cluster關于Nginx stream的負載均衡配置方式

    MySQL NDB Cluster關于Nginx stream的負載均衡配置方式

    這篇文章主要介紹了MySQL NDB Cluster關于Nginx stream的負載均衡配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • mysql中復制表結構的方法小結

    mysql中復制表結構的方法小結

    這篇文章主要介紹了mysql中復制表結構的方法,需要的朋友可以參考下
    2014-07-07
  • 一文分析SQL?Server中事務使用的鎖

    一文分析SQL?Server中事務使用的鎖

    這篇文章主要介紹了一文分析SQL?Server中事務使用的鎖,數據庫引擎使用不同的鎖模式鎖定資源,通過不同鎖的組合使用達到不同的數據庫事務隔離級別,需要的朋友可以參考一下
    2022-09-09

最新評論