Я сейчас прохожу вводный курс по базам данных в колледже, и нам поручено создать базовое веб-приложение для клонирования Flickr. Я создал все свои таблицы, но не могу правильно создавать триггеры. ...

0
Andrew 3 Мар 2021 в 20:37

1 ответ

Лучший ответ

У вас отсутствуют две точки с запятой

Как показано в примере.

CREATE TABLE Albums (
  `owner` INTEGER
);
CREATE TRIGGER ownerChange
    BEFORE UPDATE ON Albums
    FOR EACH ROW
    BEGIN
        -- owner is a column of the Albums table
        IF (NEW.owner <> OLD.owner) THEN
            -- Our textbook mentions using "RAISE_APPLICATION_ERROR",
            -- but the darn book is 20 years old, and Googling suggests
            -- using SIGNAL instead.
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Changing album owner is not allowed.';
        END IF;
    END
INSERT INTO Albums VALUES (1);
UPDATE Albums SET owner = 2 WHERE owner = 1;
Changing album owner is not allowed.
SELECT * FROM Albums;
| owner |
| ----: |
|     1 |

db <> fiddle здесь

Вне mysql Workbench вам также нужен DELIMITER

DELIMITER $$
CREATE TRIGGER ownerChange
    BEFORE UPDATE ON Albums
    FOR EACH ROW
    BEGIN
        -- owner is a column of the Albums table
        IF (NEW.owner <> OLD.owner) THEN
            -- Our textbook mentions using "RAISE_APPLICATION_ERROR",
            -- but the darn book is 20 years old, and Googling suggests
            -- using SIGNAL instead.
            SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Changing album owner is not allowed.';
        END IF;
    END$$
DELIMITER ;
0
nbk 3 Мар 2021 в 21:22