我今天一直在用触发器测试一些东西,但我坚持不懈,我不知道是什么导致了我的问题。
\n\nDELIMITER $$\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”的外星人。我知道有一个vapen
id 为 1 的行。其中Alien_Anv\xc3\xa4nder_Vapen
有一行带有alienId
abc 和vapen
as 1。我使用SIGNAL
来调试一下 的值是什么vapenid
,然后 mySQL 返回
\n\n\n从 Alien where idAlien = "abc" 删除 错误代码:1231。变量“MESSAGE_TEXT”不能设置为“NULL”的值
\n
这让我认为 NULL 是从 中的查询返回的vapenid
,但这没有意义,因为正常查询中的SELECT vapen FROM
Alien_Anv\xc3\xa4nder_Vapen正确返回 1。WHERE idAlien = \'abc\'
我已经尝试解决这个问题很长一段时间了,但我就是看不出我做错了什么。我的语法或逻辑错误/奇怪吗?
\n