gpt4 book ai didi

mysql 触发代码从 TOAD 部署,但不是从 phpmyadmin 或 mysql 控制台部署

转载 作者:行者123 更新时间:2023-11-29 14:28:26 26 4
gpt4 key购买 nike

我有一个非常简单的触发器。我从 Toad for mysql 工具创建了它,并部署了它,它的工作完美,没有任何问题。当我将其交给管理员在生产服务器中部署时,他们遇到了错误。

Phpmyadmin 错误:

1064 - 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 4

Mysql控制台错误:

ERROR 1064 (42000): You have an error in your SQL syntax; check themanual that corresponds to your MySQL server version for the rightsyntax to use near 'END' at line 1

当被问及时,他们正在从 phpmyadmin 运行代码,并且他们尝试从 mysql 控制台运行,但出现错误

为什么同样的东西是从 GUI 工具运行而不是从 Web 工具或控制台运行,这真的令人沮丧和恼火。三种不同工具的 3 种不同行为

然后我尝试了同样的操作,也得到了错误。令我惊讶的是为什么

DROP TRIGGER IF EXISTS TRG_ ;
CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW
BEGIN

DECLARE X INTEGER;
SELECT COUNT(*) into X FROM users;

IF X >= 16 THEN -- CHANGE THIS NUMBER
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'cant create more users';
END IF;

END;

有人可以告诉我我做错了什么吗?我不确定,但我猜它与 delimiter 关键字有关,我从来不理解其目的。

最佳答案

看看这个问题 - MySQL: How do I use delimiters in triggers?

创建触发器等源对象时应使用分隔符。 DELIMITER 不是 MySQL 语句,它是控制台命令,许多 MySQL 客户端都支持此命令。您可以在 MySQL 控制台中尝试此代码 -

DROP TRIGGER IF EXISTS TRG_ ;

DELIMITER $$

CREATE TRIGGER TRG_ BEFORE INSERT ON users FOR EACH ROW
BEGIN

DECLARE X INTEGER;
SELECT COUNT(*) INTO X FROM users;

IF X >= 16 THEN -- CHANGE THIS NUMBER
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'cant create more users';
END IF;

END$$

DELIMITER ;

据我所知,一些旧的 phpmyadmin 版本不支持分隔符。

关于mysql 触发代码从 TOAD 部署,但不是从 phpmyadmin 或 mysql 控制台部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10493523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com