良好的習慣需要慢慢養成,我最近開始不定時寫博客,主要內容都是開發中遇到的問題,以及解決方式,
今天是解決了觸發器創建失敗報語法錯誤的問題,
其實這問題從昨天開始就出現了,我是第一次使用觸發器,只會簡單的使用,話不多說,直接上代碼
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_staffSET 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/186500.html
標籤:其他
下一篇:Mysql常用命令
