2008-12-05 84 views
5

我有一個非常簡單的問題和解決方案,但我正在尋找一個更簡單的問題。MySQL中的兩列主鍵

我想在多個值等於現有值時防止將行添加到數據庫中。例如,如果a2 = a1且b2 = b1,則數據被拒絕。如果只有a2 = a1或只有b2 = b1,則允許。基本上我希望它像一個主鍵,需要兩個值匹配。

我知道在寫入數據庫之前,我可以通過驗證來做到這一點 - 例如,選擇*其中a ='a2'和b ='b2',然後避免在獲得結果時寫入新數據。我寧願做的是啓用一個MySQL設置,比如主鍵,它會自動阻止這樣的數據。

我對基本功能以外的MySQL並不是很熟悉,所以很抱歉,如果這很簡單。以獨特的索引和主鍵搜索各種各樣的東西並沒有幫助。

回答

10

爲您想要唯一的列創建唯一索引。

如:

CREATE UNIQUE INDEX index_name ON table(col1, col2); 

見MySQL的Create index manual

+0

http:// dev.mysql.com/doc/refman/4.1/en/create-index.html – Chris 2008-12-05 01:13:45

0

您想在創建表格(或更改現有表格)時使用MySQL CONSTRAINT語法。

+0

http://dev.mysql.com/doc/refman/4.1/en/constraint-primary-key.html – Chris 2008-12-05 01:16:13

0

除了什麼gcores說,我想補充說,你在應用程序層的驗證的另一個建議,是一件壞事。如果兩個應用程序試圖插入相同的數據並且它們是交錯的,會發生什麼?他們都可以檢查,看到數據不存在,然後插入。如果您使用唯一索引,則有兩個好處:

  • 用戶不必檢查值是否存在了。他們只是嘗試操作,如果失敗了,那意味着價值已經存在。這會稍微減輕數據庫的負擔,並使應用程序邏輯更簡單。
  • 數據庫將始終有效,因爲它本身實施規則。使用數據庫時,使用數據庫比使用硬快速規則容易得多,而不是「我們預計不會有重複數據,但技術上可能......」的碎片。