2012-02-16 80 views
2

我在我的表中添加了一个名为“room_num”的字段。基本上插入我想设置room_num的默认值是最后一个room_num + 1的最大值。显然我会使用自动增量,如果这个表只适用于一个用户,但它会适用于许多所以我有一个运行唯一索引以及唯一的字段user_index。有没有办法在Mysql phpMyAdmin中将字段默认值设置为Max + 1?

我可以运行一个基于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_INDEX 15下插入room_num默认值默认为最大room_num(0)+ 1(在这种情况下会是1)。但是,我想利用这个这里护理:

enter image description here

不是第一次在我的应用程序查询,然后在插入记录和本质使得两个数据库连接。

这可能吗?

+0

// Off topic - 你如何制作漂亮的桌子? – 472084 2012-02-16 16:52:06

+0

不,你不能这样做,在列的DEFAULT值中。你可以做的是创建一个'BEFORE/AFTER INSERT'触发器来完成计算并更新列值。此外,无论何时使用PHPMyAdmin,小猫都会死亡:/ – 2012-02-16 16:56:33

+0

@ N.B。你推荐什么,而不是PHPMyAdmin?现在不能杀小猫,我们可以! – 472084 2012-02-16 16:59:36

回答

3

嗯,你可以做这样的事情:

INSERT INTO myTable (title, user_index, room_num) 
    SELECT 'MyTitle', 10, COALESCE((MAX(room_num) + 1), 1) 
    FROM myTable 
    WHERE user_index = 10 

显然,从你的应用程序,你只想与你所需的标题和适当USER_INDEX取代'MyTitle'10实例。

注:基于我与Google的5分钟,我不认为INSERT...SELECT是一个原子操作。因此,您可能想要将其封装在事务或表锁/解锁中以防止竞争状况。

+0

触发器(带有InnoDB)**是解决问题的最好方法,而不是在表格定义中执行逻辑。 – 2012-02-16 18:08:11

相关问题