MySQL:无法在触发器中使用信号
我试图使用MySQL触发器生成一条错误消息。下面是我的代码:MySQL:无法在触发器中使用信号,mysql,sql,database,triggers,signals,Mysql,Sql,Database,Triggers,Signals,我试图使用MySQL触发器生成一条错误消息。下面是我的代码: DELIMITER $$ CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees` FOR EACH ROW BEGIN IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN SIGNAL SQLSTATE '450
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees`
FOR EACH ROW
BEGIN
IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN
SIGNAL SQLSTATE '45000';
SET MESSAGE_TEXT := 'Disabled Thing';
END IF;
END$$
DELIMITER ;
但这总是会产生错误。我不知道错误是什么,因为它没有说明任何错误,它只是“错误”
有什么建议吗?除此之外,有些人说使用
信号
会遇到问题,因为它可能依赖于MySQL版本。有什么建议吗?设置消息文本子句是信号语法的一部分-它们之间不应该有分号(;
)。
此外,它使用=
运算符,而不是:=
:
DELIMITER $$
CREATE TRIGGER `test_before_insert` BEFORE INSERT ON `Initial_Fees`
FOR EACH ROW
BEGIN
IF ((SELECT Activation from Portfolio WHERE idPortfolio = New.idPortfolio)=false) THEN
SIGNAL SQLSTATE '45000' -- Note: no semicolon
SET MESSAGE_TEXT = 'Disabled Thing'; -- Note the = operator
END IF;
END$$
DELIMITER ;
PHPMyAdmin提供了指定SQL中使用的分隔符的选项 我指定了
$
作为分隔符,而不是代码>但Mysql仍在期待代码>在某些地方。所以
CREATE TRIGGER trg_update_wp_posts BEFORE UPDATE ON wp_posts
FOR EACH ROW
IF (NEW.post_content LIKE '%<script%>%') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Script not allowed in post';
END IF;
在更新wp_帖子之前创建触发器trg_update_wp_帖子
每行
如果(新的.post_内容,如“%”),则
信号SQLSTATE“45000”设置消息_TEXT=“post中不允许使用脚本”;
如果结束;
失败
但是
在更新wp_帖子之前创建触发器trg_update_wp_帖子
每行
如果(新的.post_内容,如“%”),则
信号SQLSTATE“45000”设置消息_TEXT=“post中不允许使用脚本”;
如果结束$$
Works我在MySQL工作台中添加了这段代码,并导出了sql文件,一切都很顺利!我不知道PHP MyAdmin发生了什么。谢谢
CREATE TRIGGER trg_update_wp_posts BEFORE UPDATE ON wp_posts
FOR EACH ROW
IF (NEW.post_content LIKE '%<script%>%') THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Script not allowed in post';
END IF$$