2009-08-10 6 views
2

Рассмотрит пользовательскую таблицу: Имя пользователя, EMAIL1, email2Две колонки в Mysql с уникальностью ограничения между column1 и COLUMN2

Теперь я хочу, чтобы убедиться, что никакие две строк в этой таблице не имеют общий адрес электронной почты , Какой был бы лучший способ обеспечить это?

Например: Если таблица имеет строку: «Билл, счет @ email.com, счет @ gmail.com», то пытается вставить строку типа «Билли, билли @ yahoo.com, bill @ email.com», должен дать ошибку.

Спасибо заранее, Chandresh

ответ

1

К сожалению, 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 
+0

Это правильный ответ на вопрос, который я поставил. Но, к сожалению, мои требования немного изменились, и, следовательно, я буду использовать отдельную таблицу для сопоставления электронной почты. – Champ

0

Может быть, вы могли бы использовать какое-то хранимую процедуру, но это может быть то, что вы могли бы проверить, прежде чем вставлять данные.

SELECT email1, email2 FROM yourTable 
WHERE email1 LIKE %@email% or email2 LIKE %@email% 
4

Похоже, вы пытаетесь создать комбинацию между 1: 1 и 1: несколько с вашей моделью данных. Ваша лучшая ставка заключается в том, чтобы хранить каждую комбинацию имени пользователя и электронной почты отдельно. Одна строка для «Username, email1» и другая строка для «Username, email2». Если у вас есть дополнительные поля, связанные с именем «Username», они могут оставаться в основной таблице пользователей, в то время как электронные письма будут перемещаться в таблицу столбцов с двумя столбцами с уникальным индексом с несколькими столбцами (Имя пользователя, электронная почта).

+0

Я просто подумал о том же ответе, когда планирую посмотреть на эту страницу ответы. Причина, по которой я выбираю это, - это «имя пользователя, адрес электронной почты, отскок» ... так что вы видите, что мне нужен также отскоченный флаг, и кто знает, что позже. – Champ

+0

О да, это также предотвращает случай, когда пользователь вводит тот же адрес электронной почты для email1 и email2. :-) – Champ