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

有没有办法在Mysql phpMyAdmin中将字段默认值设置为Max+1?,mysql,phpmyadmin,Mysql,Phpmyadmin,我正在向表中添加一个名为room_num的字段。基本上,在插入时,我希望将room_num的默认值设置为最后一个room_num的最大值+1。显然,如果这个表只应用于一个用户,我会使用自动增量,但是,它将应用于多个用户,所以我有一个运行的唯一索引以及一个唯一字段user\u索引 我可以基于用户索引运行一个查询,并返回房间的最大值,但是,既然我已经在这里了,有没有办法使默认值成为某种函数 例如,我的表格如下所示: +-------+-------------+---------+---------

我正在向表中添加一个名为room_num的字段。基本上,在插入时,我希望将room_num的默认值设置为最后一个room_num的最大值+1。显然,如果这个表只应用于一个用户,我会使用自动增量,但是,它将应用于多个用户,所以我有一个运行的唯一索引以及一个唯一字段user\u索引

我可以基于用户索引运行一个查询,并返回房间的最大值,但是,既然我已经在这里了,有没有办法使默认值成为某种函数

例如,我的表格如下所示:

+-------+-------------+---------+-------------+
| index |  room_num   |  title  |  user_index |
+-------+-------------+---------+-------------+
| 0     | 0           | Patio   | 10          |
+-------+-------------+---------+-------------+
| 1     + 1           | Dining  | 10          |
+-------+-------------+---------+-------------+
| 2     + 0           | Bar     | 15          |
+-------+-------------+---------+-------------+
| 3     + 2           | Dining  | 10          |
+-------+-------------+---------+-------------+
INSERT INTO myTable (title, user_index, room_num)
  SELECT 'MyTitle', 10, COALESCE((MAX(room_num) + 1), 1)
  FROM   myTable
  WHERE  user_index = 10
所以,现在我想让用户索引15的下一次插入的room_num的默认值默认为max room_num 0+1,在本例中为1。但是,我想在这里解决这个问题:

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


这可能吗?

嗯,你可以这样做:

+-------+-------------+---------+-------------+
| index |  room_num   |  title  |  user_index |
+-------+-------------+---------+-------------+
| 0     | 0           | Patio   | 10          |
+-------+-------------+---------+-------------+
| 1     + 1           | Dining  | 10          |
+-------+-------------+---------+-------------+
| 2     + 0           | Bar     | 15          |
+-------+-------------+---------+-------------+
| 3     + 2           | Dining  | 10          |
+-------+-------------+---------+-------------+
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的实例替换为所需的标题和适当的用户索引


注:根据我在谷歌的五分钟时间,我不认为INSERT…SELECT是一个原子操作。因此,您可能希望将其包装在事务或表锁定/解锁中以防止竞争条件。

//脱离主题-如何制作这些漂亮的表?不,您不能在列的默认值内这样做。您可以做的是创建一个BEFORE/AFTER INSERT触发器,该触发器将执行计算并更新列值。另外,每当你使用PHPMyAdmin时,一只小猫就会死亡:/@N.B.你推荐什么来代替PHPMyAdmin?我们现在不能杀小猫了,是吗!SQLYog、MySQL Workbench,任何不需要您在服务器上安装充满安全漏洞的PHP脚本的东西。@Jleagle plus-plus和pipes!使用InnoDB触发器是解决问题的最佳方法,而不是在表定义中执行逻辑。