【发布时间】:2016-04-21 01:53:49
【问题描述】:
我有一张像这样的桌子
| id | location | status | parent_id |
-----------------------------------
| 1 | 35 | 0 | 100 |
| 2 | 35 | 1 | 100 |
| 3 | 36 | 0 | 200 |
| 4 | 36 | 0 | 200 |
当且仅当具有特定 parent_id 的所有行都将状态设置为 0 时,我希望能够更新组并设置与某个 parent_id 匹配的行的状态 = 0。
用例是这样的: 一项活动 (parent_id) 可以在多个位置之一进行。每个活动都有一些子活动。仅当没有子活动开始时,活动才可以从一个位置移动到另一个位置。
是否可以在 MySQL 中进行事务处理?如果可以在不锁定整个表的情况下做到这一点,那么效率会高得多,但我不确定是否有一个单一的语句解决方案。
提前致谢。
编辑:我错过了一个重要的部分 - parent_id 是存储主要活动的表的 id。因此,此表与其自身在 (id, parent_id) 上的连接是不正确的。
【问题讨论】:
-
如果具有该父项的所有行的状态均为 0,则相关行的状态已为 0。因此,无需更新。
-
子活动也可以有子活动吗?
-
@gordonlinoff 我被困在如何确定该父项的所有行是否具有相同的状态,然后(并且只有这样)更改这些子活动的组(并将状态保留为 0)
-
@christhornhill 在这种情况下,我可以假设子活动不会有子活动 - 我认为使用 parent_id 可能是混淆的根源 - parent_id 是另一个表的 id 列
标签: mysql sql conditional updates transactional