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

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

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

問題根源

  1. SQLyog的語句分隔邏輯

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

    • 當(dāng)代碼有縮進(jìn)時,SQLyog可能錯誤地將縮進(jìn)后的內(nèi)容識別為新的SQL語句

  2. DELIMITER的敏感性

    • DELIMITER //命令必須獨(dú)立一行且無前導(dǎo)空格

    • 任何縮進(jìn)都會導(dǎo)致SQLyog將其視為普通文本而非指令

  3. 存儲過程體內(nèi)的語句

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

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

正確寫法示例

-- 必須頂格寫(無縮進(jìn))
DELIMITER //
CREATE PROCEDURE grant_role_to_all_users()
BEGIN
    -- 這里面的縮進(jìn)不會影響執(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//
-- 必須頂格寫(無縮進(jìn))
DELIMITER ;

永久解決方案

  1. 關(guān)閉SQLyog的自動分隔功能

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

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

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

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

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

  3. 檢查編輯器設(shè)置

    • 確保沒有開啟"智能縮進(jìn)"或"語法感知縮進(jìn)"功能

為什么命令行不受影響?

MySQL原生命令行客戶端:

  • 完全依賴DELIMITER指令

  • 不關(guān)心縮進(jìn)和格式

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

而SQLyog等圖形工具為提高易用性,會嘗試自動解析SQL結(jié)構(gòu),導(dǎo)致對格式敏感。

最佳實踐建議

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

    • DELIMITER和END//必須頂格

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

  2. 復(fù)雜過程建議:

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

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

mysql -u user -p db_name < procedure.sql

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

相關(guān)文章

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

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

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

    MySQL數(shù)據(jù)庫中刪除重復(fù)記錄簡單步驟

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

    mysql 5.7 數(shù)據(jù)庫安裝步驟個人總結(jié)

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

    IOS 數(shù)據(jù)庫升級數(shù)據(jù)遷移的實例詳解

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

    mysql常用函數(shù)與視圖索引全面梳理

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

    實現(xiàn)數(shù)據(jù)庫水平切分的兩個思路

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

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

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

    MySQL NDB Cluster關(guān)于Nginx stream的負(fù)載均衡配置方式

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

    mysql中復(fù)制表結(jié)構(gòu)的方法小結(jié)

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

    一文分析SQL?Server中事務(wù)使用的鎖

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

最新評論