我正在向我的表中添加一个名为“room_num”的字段。基本上在插入时,我想将 room_num 的默认值设置为最后一个 room_num + 1 的最大值。显然,如果此表仅适用于一个用户,我将使用自动增量,但是,它将适用于许多所以我有一个正在运行的唯一索引以及一个唯一字段 user_index。
我可以根据 user_index 运行查询并返回“room_num”的最大值,但是,既然我已经在这里了,有没有办法使默认值成为某种函数?
所以,例如我的表是这样的:
+-------+-------------+---------+-------------+
| index | room_num | title | user_index |
+-------+-------------+---------+-------------+
| 0 | 0 | Patio | 10 |
+-------+-------------+---------+-------------+
| 1 + 1 | Dining | 10 |
+-------+-------------+---------+-------------+
| 2 + 0 | Bar | 15 |
+-------+-------------+---------+-------------+
| 3 + 2 | Dining | 10 |
+-------+-------------+---------+-------------+
Run Code Online (Sandbox Code Playgroud)
所以,现在我希望 user_index 15 的下一次插入的 room_num 的默认值默认为 max room_num (0) + 1(在这种情况下为 1)。但是,我想在这里解决这个问题:

而不是首先在我的应用程序中查询它然后插入记录并实质上建立两个数据库连接。
这可能吗?
好吧,你可以这样做:
INSERT INTO myTable (title, user_index, room_num)
SELECT 'MyTitle', 10, COALESCE((MAX(room_num) + 1), 1)
FROM myTable
WHERE user_index = 10
Run Code Online (Sandbox Code Playgroud)
显然,在您的应用程序中,您只需用所需的标题和正确的 user_index 替换'MyTitle'和 的实例10。
注意:根据我与 Google 的五分钟交流,我认为INSERT...SELECT这不是原子操作。因此,您可能希望将其包装在事务或表锁定/解锁中以防止竞争条件。
| 归档时间: |
|
| 查看次数: |
5221 次 |
| 最近记录: |