好的我知道我可以在應用程序層做到這一點,這可能是最簡單的事情,但只是爲了確保沒有錯誤流入數據庫,我有一個嚴重的問題如何在多個列上實現雙向唯一索引
我有兩列X和Y,每個存儲兩個整數(A或B在任何列中)。是否有可能有一個唯一索引的約束,使得在任何情況下,我們應該有
- X列A和第Y列爲B
- X列與B和y列有一個
我會給出一個場景
我有兩個用戶,userA有id 678498和userB有id 679879.兩個用戶都打一個2人遊戲,這需要這個session的新記錄存儲在一個表中(tbl_chalenger)。要做到這一點,我有一個列「主機」和「挑戰者」的表。
我添加了一個獨特的約束,以tbl_challenger作爲
UNIQUE KEY `UNIQUE_PARTICIPANTS` (`host`,`challenger`)
品牌用戶主機或挑戰者基本上依賴誰開始遊戲。因此,如果用戶A啓動遊戲,我們有一個查詢,如下所示
INSERT INTO `tbl_challenger` VALUES(678498 , 679879);
這將創建一個新的記錄,不過不幸的是,如果在同一時間用戶B嘗試啓動遊戲與用戶A,我們得到
INSERT INTO `tbl_challenger` VALUES(679879, 678498);
這創建了一個新的不需要的行,相同的參與者。這與UNIQUE鍵約束無關。
所以我的問題是,如何有一個約束是雙向的?這樣的「主機挑戰者」以及「挑戰者 - 主機」不能有相同的數據對
很酷,我會試試這個,並在幾分鐘內回報! – stone 2009-09-21 10:35:46
當然,慢慢來;-) – 2009-09-21 10:51:09
完美的作品!是的,只是使用MySQL,因爲它是一個僅使用MySQL的應用程序的擴展,沒有時間爲其他DBMS編寫一個全新的抽象層,但是當我獲得更多時間時,肯定會查看。非常感謝黑客 – stone 2009-09-21 10:53:47