mysql 从另一个 table 更新列后触发

mysql trigger after update column from another table

我有 2 个表格,如下所示。

我想为 table_one 创建一个触发器。当更改 table_one 中的用户名时,从 table_two 用户值更新 user_id 值。

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      |
+--------------+----------+

提前致谢

执行 BEFORE UPDATE 触发器,而不是 AFTER UPDATE 触发器。

(我不认为在 AFTER UPDATE 触发器中修改已更新的行是可能的,这触发了触发器。我可能是错的,但我就是想不通那是怎么回事会工作。)

这是 table_one 上的 BEFORE UPDATE 触发器的演示,它根据查询的结果为 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)。