mysql триггер после обновления столбца из другой таблицы - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть 2 таблицы, которые ниже.

Я хотел бы создать триггер для table_one. при изменении имени пользователя в table_one обновите значение user_id из пользовательского значения table_two.

table_one:
+--------------+----------+
| user_id      | username |
+--------------+----------+
| 15           | robin    |
| 46           | albert   |
+--------------+----------+ 
table_two:
+--------------+----------+
| id           | user     |
+--------------+----------+
| 1            | john     |
| 2            | jack     |
| 3            | robin    |
| 4            | kylie    |
| 5            | robert   |
| 6            | albert   |
| 7            | jay      |
+--------------+----------+

заранее спасибо

1 Ответ

0 голосов
/ 11 февраля 2020

Выполните триггер BEFORE UPDATE, а не триггер AFTER UPDATE.

(Я не думаю, что в триггере AFTER UPDATE возможно изменить строку, которая была обновлена ​​и которая активировала триггер. I могу ошибаться, но я просто не могу понять, как это будет работать.)

Это демонстрация триггера BEFORE UPDATE на table_one, который присваивает значение user_id столбец (из обновляемой строки) на основе результата запроса:

DELIMITER $$

CREATE TRIGGER ... 
BEFORE UPDATE ON table_one
BEGIN

  # local variable we will temporarily store a value fetched from a query
  DECLARE li_new_id BIGINT DEFAULT NULL;  # match datatype of table_two.id

  # lookup `id` value from `table_two` with a SQL query
  SELECT s.id
    INTO li_new_id
    FROM table_two s
   WHERE s.user = NEW.username
   ORDER BY s.id 
   LIMIT 1 ;

  # assign the value we fetched to the `user_id` column of the row being updated
  SET NEW.user_id := li_new_id ;

END$$

DELIMITER ;

Обратите внимание, что если запрос не найдет подходящую строку, локальная переменная будет иметь значение NULL. Таким образом, оператор SET присвоит NULL столбцу user_id. В триггере нет проверки, что назначаемое нами значение не будет нарушать ограничение (NOT NULL, UNIQUE, FOREIGN KEY).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...