建立觸發器時出現......for the right syntax to use near ‘‘ at line 12

2020-10-22 16:00:34

良好的習慣需要慢慢養成,我最近開始不定時寫部落格,主要內容都是開發中遇到的問題,以及解決方式。
今天是解決了觸發器建立失敗報語法錯誤的問題。

其實這問題從昨天開始就出現了,我是第一次使用觸發器,只會簡單的使用。話不多說,直接上程式碼

CREATE TRIGGER trig2
AFTER UPDATE
ON `y`.`counselor` 
FOR EACH ROW 
BEGIN
	IF (select count(id) from `x`.`t_staff` where `create_date_time`=OLD.update_time)>0
		THEN
			UPDATE `x`.`t_staff`
				SET 
				group_id = 7, create_date_time = NEW.update_time
				WHERE 
				create_date_time = OLD.update_time;
	ELSE
			INSERT INTO `x`.`t_staff`(`id`, `group_id`, `store_id`, `name`, `mobile`, `password`, `job_number`, `state`, `create_date_time`, `open_id`, `weixin_code`, `weixin_activate_date_time`, `weixin_focus_state`, `weixin_config_id`, `head_img_url`) 
	VALUES (NULL, 7, NULL, NULL, NULL, NULL, NULL, NULL, NEW.update_time, NULL, NULL, NULL, NULL, NULL, NULL);
	END IF;
END;

這個建立觸發器的語句一執行就報錯

 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 '' at line 12

結果我不停地尋找錯誤以及相關文章,在嘗試加入了 delimiter 函數後觸發器建立成功了,程式碼如下:

delimiter //
CREATE TRIGGER trig2
AFTER UPDATE
ON `y`.`counselor` 
FOR EACH ROW 
BEGIN
	IF (select count(id) from `x`.`t_staff` where `create_date_time`=OLD.update_time)>0
		THEN
			UPDATE `x`.`t_staff`
				SET 
				group_id = 7, create_date_time = NEW.update_time
				WHERE 
				create_date_time = OLD.update_time;
	ELSE
			INSERT INTO `x`.`t_staff`(`id`, `group_id`, `store_id`, `name`, `mobile`, `password`, `job_number`, `state`, `create_date_time`, `open_id`, `weixin_code`, `weixin_activate_date_time`, `weixin_focus_state`, `weixin_config_id`, `head_img_url`) 
	VALUES (NULL, 7, NULL, NULL, NULL, NULL, NULL, NULL, NEW.update_time, NULL, NULL, NULL, NULL, NULL, NULL);
	END IF;
END;
//

我在建立觸發器的語句錢加上delimiter //,並在建立觸發器的語句最後面補上//,我百度一番之後,瞭解了原因:

如果不使用delimiter修改結束符的話,當我們執行完 ‘UPDATE x.t_staff SET group_id = 7, create_date_time = NEW.update_time WHERE create_date_time = OLD.update_time;’ 這條語句後,mysql直譯器識別到分號就自動執行了,而修改了結束符後,只有我們輸入// 時,建立觸發器這條語句才會執行。

注意:建立完觸發器後要記得將結束符改回分號

delimiter ;

可參考其他文章:https://blog.csdn.net/qq_36925843/article/details/88839477?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduend~default-2-88839477.nonecase&utm_term=%E5%88%9B%E5%BB%BA%E8%A7%A6%E5%8F%91%E5%99%A8%20%E6%80%8E%E4%B9%88%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8delimiter&spm=1000.2123.3001.4430

END