我在我的表中添加了一个名为“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 |
+-------+-------------+---------+-------------+
所以,现在我想将user_um的下一个插入的room_num的默认值默认为max room_num(0)+ 1(在这种情况下为1)。但是,我想在这里解决这个问题:
不是先在我的应用程序中查询它,然后插入记录,实质上是建立两个数据库连接。
这可能吗?
答案 0 :(得分:3)
嗯,你可以这样做:
INSERT INTO myTable (title, user_index, room_num)
SELECT 'MyTitle', 10, COALESCE((MAX(room_num) + 1), 1)
FROM myTable
WHERE user_index = 10
显然,从您的应用中,您只需将'MyTitle'
和10
的实例替换为您想要的标题和正确的user_index。
注意:基于我与Google的五分钟,我认为INSERT...SELECT
不是原子操作。因此,您可能希望将其包装在事务或表锁定/解锁中以防止竞争条件。