2012-02-16 115 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

相關問題