Два столбца в Mysql с ограничением уникальности между column1 и column2 - PullRequest
2 голосов
/ 10 августа 2009

Давайте рассмотрим пользовательскую таблицу: Имя пользователя, EMAIL1, email2

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

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

Заранее спасибо, Chandresh

Ответы [ 3 ]

4 голосов
/ 10 августа 2009

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

1 голос
/ 10 августа 2009

К сожалению, ограничения 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 голосов
/ 10 августа 2009

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

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