我有一个触发器:
CREATE TRIGGER BEFORE_DELETE_ON_SENTIERO__HA__TAPPA
BEFORE DELETE ON SENTIERO__HA__TAPPA
FOR EACH ROW
BEGIN
DECLARE temp_prima_tappa INTEGER;
DECLARE temp_ultima_tappa INTEGER;
-- NOW THIS QUERY WILL FAIL; it checks if the record that has to be deleted is in the table
IF NOT EXISTS ( SELECT *
FROM SENTIERO__HA__TAPPA as sht
WHERE OLD.IDsentiero=sht.IDsentiero and OLD.IDtappa=sht.IDtappa) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'DELETE: La tappa indicata non è nel sentiero; impossibile elimnarla';
END IF;
IDsentiero和IDtappa是他们相关表格的PK : SENDTIERO的IDsentiero,TAPPA的IDtappa。
问题是 DELETE QUERY没有回复我的错误消息;只需它就可以运行DELETE QUERY,虽然它不能删除任何内容,因为该表中不存在该记录。
问题是查询..我很确定,但我找不到错误。
答案 0 :(得分:0)
这样的事情应该有效:
declare recsexist int;
set recsexist = 0;
SELECT 1 INTO recsexist
FROM SENTIERO__HA__TAPPA as sht
WHERE OLD.IDsentiero=sht.IDsentiero and OLD.IDtappa=sht.IDtappa;
IF (recsexist > 0) THEN
...
END IF;
答案 1 :(得分:0)
删除触发器仅在实际删除的行上运行,因此在触发器运行时,该行必须存在。您不能使用触发器来查找无效的删除语句。