MYSQL 如何在更新 table 后更新 table 中的一行?

MYSQL How can I update a row in a table after updating the same table?

我的 table 的每一行都有一个子项,例如 ID 1 是 11 的父项,11 是 111 的父项并且每一行都有一个余额,如果我更新 111 的余额,我需要, 11的余额也更新了1的余额

例如:UPDATE ACCOUNTS SET value = 100 WHERE ID = 1 在这种情况下,11 的值将是 100,而 1 的值 然后我可以做这样的事情: UPDATE ACCOUNTS SET value = value + 150 WHERE ID = 11; 在这种情况下,11 的值将是 250,1 的值将是 250,1 的值应该保持 100。我需要做类似的事情

IM 使用 mySQL

正如您在评论中提到的,MySQL 通常不允许您定义一个更新触发器,该触发器本身会在同一个 table 上触发更多更新。假设您使用的是 MySQL 8+,这里的一个选项是定义一个递归 CTE,它针对所有要更新的记录:

WITH RECURSIVE cte (id, value, parent_id) AS (
    SELECT id, value, parent_id
    FROM ACCOUNTS
    WHERE id = 111
    UNION ALL
    SELECT t1.id, t1.value, t1.parent_id
    FROM ACCOUNTS t1
    INNER JOIN cte t2
        ON t1.id = t2.parent_id
)

UPDATE ACCOUNTS a1
INNER JOIN cte a2
    ON a1.id = a2.id
SET value = 100;

这假设您希望对层次结构中的每个匹配 id 执行相同的更新逻辑。 CTE 将生成从 id = 111 开始的所有记录,并在树上向后工作到根。