有没有办法在Mysql phpMyAdmin中将字段默认值设置为Max + 1?

时间:2012-02-16 16:47:00

标签: mysql phpmyadmin

我在我的表中添加了一个名为“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)。但是,我想在这里解决这个问题:

enter image description here

不是先在我的应用程序中查询它,然后插入记录,实质上是建立两个数据库连接。

这可能吗?

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不是原子操作。因此,您可能希望将其包装在事务或表锁定/解锁中以防止竞争条件。