更新触发器后创建空字符串时出现无法解释的 MySQL 错误 #1064?

Posted

技术标签:

【中文标题】更新触发器后创建空字符串时出现无法解释的 MySQL 错误 #1064?【英文标题】:Unexplainable MySQL Error #1064 for Empty String On creating After Update Trigger? 【发布时间】:2019-02-04 16:08:05 【问题描述】:

我在 Windows 8.1 机器上使用服务器版本:10.1.34-MariaDB(在 XAmpp 7.2.7-0-VC15-installer 中分发)运行 mysql,使用 Google Chrome 上的 phpMyadmin 访问 Mysql 数据库,我收到此错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以了解在第 4 行的 '' 附近使用正确的语法

为此创建触发器语法:

DROP TRIGGER IF EXISTS Tsopd_main_AfterUpdate;
CREATE TRIGGER Tsopd_main_AfterUpdate AFTER UPDATE
ON sopd_main FOR EACH ROW 
BEGIN
SET @jns = 1;
END

当我像这样更改代码时:

DROP TRIGGER IF EXISTS Tsopd_main_AfterUpdate;
CREATE TRIGGER Tsopd_main_AfterUpdate AFTER UPDATE
ON sopd_main FOR EACH ROW 
BEGIN

END

或者像这样:

DROP TRIGGER IF EXISTS Tsopd_main_AfterUpdate;
CREATE TRIGGER Tsopd_main_AfterUpdate AFTER UPDATE
ON sopd_main FOR EACH ROW 
BEGIN
-- SET @jns = 1;
END

成功了。

谁能帮我看看哪里出了问题? 谢谢。

【问题讨论】:

【参考方案1】:

您需要使用DELIMITER 指令来更改查询分隔符,因此您可以在触发器定义中使用;

DELIMITER $$
DROP TRIGGER IF EXISTS Tsopd_main_AfterUpdate$$
CREATE TRIGGER Tsopd_main_AfterUpdate AFTER UPDATE
ON sopd_main FOR EACH ROW 
BEGIN
SET @jns = 1;
END$$
DELIMITER ;

【讨论】:

非常感谢。我没想到会这样。

以上是关于更新触发器后创建空字符串时出现无法解释的 MySQL 错误 #1064?的主要内容,如果未能解决你的问题,请参考以下文章

在配置单元中发出选择查询时出现异常'java.lang.IllegalArgumentException(无法从空字符串创建路径)'

创建客户时出现条带错误:您为“卡”传递了一个空字符串

尝试创建我的第一个 oracle 触发器时出现问题

使用MLCP加载数据时出现XDMP-NEWSTAMP错误

NSInternalInconsistencyException:无法更新钥匙串项

Django和Bootstrap:防止出现空字符串时出现警告框