在触发器中声明和使用变量

gal*_*tor 5 mysql trigger

我今天一直在用触发器测试一些东西,但我坚持不懈,我不知道是什么导致了我的问题。

\n\n
DELIMITER $$\n\nUSE `pucko`$$\n\nCREATE TRIGGER `after_delete_Alien`\nAFTER DELETE ON `Alien` FOR EACH ROW BEGIN       \n    DECLARE vapenid INT;\n    DECLARE alien_count INT;\n    DECLARE rymdskepp_count INT;\n\n    SET vapenid = (SELECT vapen FROM `Alien_Anv\xc3\xa4nder_Vapen` WHERE idAlien = OLD.idAlien);\n\n    SIGNAL SQLSTATE \'45000\' SET MESSAGE_TEXT = vapenid; // Debug, this shows that vapenid is null?\n\n    DELETE FROM `Alien_Anv\xc3\xa4nder_Vapen` WHERE idAlien = OLD.idAlien;\n\n    SET alien_count = (SELECT count(*) FROM `Alien_Anv\xc3\xa4nder_Vapen` WHERE vapen = vapenid);\n    SET rymdskepp_count = (SELECT count(*) FROM `Rymdskepp_Anv\xc3\xa4nder_Vapen` WHERE vapen = vapenid);\n\n\n    if(alien_count < 1 && rymdskepp_count < 1) THEN\n        DELETE FROM `vapen` WHERE idVapen = vapenid;\n    END IF;\nEND$$\n
Run Code Online (Sandbox Code Playgroud)\n\n

我遇到的问题是何时vapenid/应该设置。我知道有一个ID为“abc”的外星人。我知道有一个vapenid 为 1 的行。其中Alien_Anv\xc3\xa4nder_Vapen有一行带有alienIdabc 和vapenas 1。我使用SIGNAL来调试一下 的值是什么vapenid,然后 mySQL 返回

\n\n
\n

从 Alien where idAlien = "abc" 删除 错误代码:1231。变量“MESSAGE_TEXT”不能设置为“NULL”的值

\n
\n\n

这让我认为 NULL 是从 中的查询返回的vapenid,但这没有意义,因为正常查询中的SELECT vapen FROMAlien_Anv\xc3\xa4nder_Vapen正确返回 1。WHERE idAlien = \'abc\'

\n\n

我已经尝试解决这个问题很长一段时间了,但我就是看不出我做错了什么。我的语法或逻辑错误/奇怪吗?

\n

Wor*_*DBA 2

根据我上面的评论,您很可能有一个设置为级联删除的外键。这就是导致您的查找失败的原因。

我希望这可以帮助你。