Search code examples
mysqltriggerssql-delete

How to write a trigger to abort delete in MYSQL?


I read this article but it seems not work for delete. I got this error when tried to create a trigger:

Executing SQL script in server

ERROR: Error 1363: There is no NEW row in on DELETE trigger

CREATE TRIGGER DeviceCatalog_PreventDeletion 
BEFORE DELETE on DeviceCatalog
FOR EACH ROW
BEGIN
    DECLARE dummy INT;

    IF old.id = 1 or old.id =2 THEN
        SELECT * FROM DeviceCatalog WHERE DeviceCatalog.id=NEW.id;
    END IF;
END; 

SQL script execution finished: statements: 4 succeeded, 1 failed


Solution

  • Try something like this -

    DELIMITER $$
    
    CREATE TRIGGER trigger1
    BEFORE DELETE
    ON table1
    FOR EACH ROW
    BEGIN
      IF OLD.id = 1 THEN -- Abort when trying to remove this record
        CALL cannot_delete_error; -- raise an error to prevent deleting from the table
      END IF;
    END
    $$
    
    DELIMITER ;