讓我們考慮一個用戶表: 用戶名,EMAIL1,EMAIL2兩列在MySQL與列1和列2之間的唯一性約束
現在,我要確保在這個表中沒有兩行有什麼常見的電子郵件地址。什麼是確保這一點的最佳方式?例如:如果表格有「Bill,bill @ email.com,bill @ gmail.com」的行,則 試圖插入一行像「Billy,billy @ yahoo.com,bill @ email.com」應該給出一個錯誤。
由於提前, Chandresh
讓我們考慮一個用戶表: 用戶名,EMAIL1,EMAIL2兩列在MySQL與列1和列2之間的唯一性約束
現在,我要確保在這個表中沒有兩行有什麼常見的電子郵件地址。什麼是確保這一點的最佳方式?例如:如果表格有「Bill,bill @ email.com,bill @ gmail.com」的行,則 試圖插入一行像「Billy,billy @ yahoo.com,bill @ email.com」應該給出一個錯誤。
由於提前, Chandresh
可悲的是,check
約束不是的MySQL的一個特點。那麼,他們是,但他們被忽略。
使用trigger
,而不是:
create trigger MyValidation after insert on user for each row
begin
if (select count(*) from user where
email1 = new.email1
or email1 = new.email2
or email2 = new.email1
or email2 = new.email2) > 0 then
--I know that the delete could use this logic, but you can
--insert other instructions here.
delete from user where username = new.username
end if
end
也許你可以使用某種類型的存儲過程,但是這可能是東西,你可以將你的數據之前檢查。
SELECT email1, email2 FROM yourTable
WHERE email1 LIKE %@email% or email2 LIKE %@email%
看起來你試圖用你的數據模型強制1:1和1:1之間的組合。您最好的選擇是分別存儲每個用戶名/電子郵件組合。一行爲「用戶名,電子郵件1」,另一行爲「用戶名,電子郵件2」。如果您有其他與「用戶名」相關的字段,那麼這些字段可能會保留在覈心用戶表中,而電子郵件則會移動到兩列電子郵件表格(用戶名,電子郵件)上具有多列唯一索引。
這是我提出的問題的正確答案。但不幸的是,我的要求稍有改變,因此,我將使用單獨的表格進行電子郵件用戶映射。 – Champ 2009-08-11 13:20:34