2013-03-27 106 views
1

這裏有一個例子我所期待的事:MySQL爲來自多個表的列添加唯一約束?

我有3個表:

  • 村(ID,姓名)
  • 戶數(ID,village_id)
  • 人(FIRST_NAME, last_name,household_id)

我想確保在同一個村莊裏沒有兩個人有相同的名字和姓氏。

基本上我願做這一類東西:

ALTER TABLE persons 
ADD UNIQUE (first_name, last_name, households.village_id 
      WHERE household_id=households.id) 

有沒有辦法做這樣的事情?

回答

2

你不能直接做到這一點,但如果這是存儲真實世界的數據,理論上兩個同名的人可能住在一個村莊內,所以這可能不是最好的主意?

如果你堅持走這條路線,那麼我建議使用STORED PROCEDURE來處理插入到這個表中的參數,如用戶名和村莊。存儲過程然後可以在INSERT之前執行SELECT以檢查衝突。這將取代任何INSERT查詢。更新還需要通過程序來處理以防止衝突。

+1

嗨,Simon!謝謝您的回答。在我看來,這樣做更具戰略意義的原因是因爲對於我們公司來說,當一個村莊中有幾個人同名時,似乎更應該處理例外情況,那麼就要承擔用戶的風險創造重複和混亂的數據。你的解決方案聽起來不錯,我會更詳細地研究它。謝謝 ! – 2013-03-28 05:43:19

2

我認爲沒有簡單的方法來做到這一點。

您可能想嘗試在插入/更新之前創建觸發器,並在您的自定義條件中拋出錯誤。但它高度依賴於你的MySQL版本:在5.5之前,我認爲沒有正確的方法來提出錯誤 - 通常人們會使用黑客來調用不存在的過程。但是,如果您的版本> 5.5,則可以使用SIGNAL語句:http://dev.mysql.com/doc/refman/5.5/en/signal.html

+0

好的,謝謝你的回答!我感謝您的幫助 ! – 2013-03-28 05:42:11