MySQL delimiter語句用于設(shè)置自定義的分隔符,以區(qū)分MySQL本身使用的用于結(jié)束一個(gè)語句的分號(hào)。然而,有時(shí)候你可能會(huì)遇到delimiter無效的情況,下面介紹幾種可能的原因:
#1. 錯(cuò)誤的分隔符語法 delimiter // #設(shè)置分隔符 create procedure test() begin select 'hello world'; end// delimiter ; #正確的分隔符語法: delimiter // create procedure test() begin select 'hello world'; end// delimiter ;
上述的例子中,第一個(gè)delimiter語句設(shè)置的分隔符語法不正確,導(dǎo)致后續(xù)的Stored Procedure無法成功創(chuàng)建。
#2. 分隔符與SQL語句中的其他字符沖突 delimiter // create trigger test_trigger before insert on test_table for each row begin if NEW.test_column = 1 then set NEW.test_column = 2; end if; end// delimiter ; #發(fā)現(xiàn)問題:語句中使用了'//' #正確的分隔符語法: delimiter $$ #使用不沖突的分隔符 create trigger test_trigger before insert on test_table for each row begin if NEW.test_column = 1 then set NEW.test_column = 2; end if; end$$ delimiter ;
在上述例子中,分隔符'//'出現(xiàn)在了Trigger語句中,與delimiter語句沖突。因此需要使用一個(gè)未在代碼中出現(xiàn)的字符,如'$$',作為分隔符。
#3. 在MySQL客戶端控制臺(tái)輸入時(shí)出錯(cuò) delimiter // create function test_func(input varchar(256)) returns varchar(256) begin set @v_output = concat('You said "', input, '"'); return @v_output; end// delimiter ; #發(fā)現(xiàn)問題:在MySQL客戶端控制臺(tái)中輸入時(shí)將delimiter語句拆分成多個(gè)行,導(dǎo)致語法錯(cuò)誤 #正確的分隔符語法: delimiter // create function test_func(input varchar(256)) returns varchar(256) begin set @v_output = concat('You said "', input, '"'); return @v_output; end// delimiter ;
在上述例子中,delimiter語句被拆成了多行,導(dǎo)致語法錯(cuò)誤。需要確保delimiter語句在同一行輸入。
綜上所述,delimiter無效有多種可能的原因,需要仔細(xì)檢查和排除。