2010-03-12 4 views
0

У меня есть стол с четырьмя столбцами: Col1, Col2, Col3 и Col4.
Col1, Col2, Col3 - это строки, а Col4 - целочисленный первичный ключ с автоматическим приращением. Теперь мое требование состоит в том, чтобы иметь уникальную комбинацию Col2 и Col3.Уникальный ключ в MySql

Я хотел сказать, как.

Insert into table(Col1, Col2, Col3) Values ('val1', 'val2', 'val3'); 
Insert into table(Col1, Col2, Col3) Values ('val4', 'val2', 'val3'); 

второй оператор должен бросить ошибку в той же комбинации «val2», «val3» присутствует в таблице. Но я не могу сделать его первичным ключом, так как мне нужен столбец автоматического увеличения, и в этом случае col4 должен быть первичным. Пожалуйста, дайте мне знать подход, которым я могу пользоваться как в своем столе.

+0

Что делать, если я попытаюсь вставить «val3» в столбец 2 и «val 2» в столбце 3 - ваши бизнес-правила разрешают пары значений в обратном порядке можно рассматривать как дубликат? –

+0

Да, реверс должен быть возможен. – Vinodtiru

ответ

1

Вы можете установить в схеме базы данных требование, чтобы комбинация из двух или более ключей была уникальной. Это можно найти здесь:

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

Это можно сделать с помощью команды, такие как

ALTER TABLE YourTable ADD UNIQUE (Col2,Col3); 
1

Вы можете сделать это, создав уникальный индекс в этих полях.

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

С этого док:

уникальный индекс создает ограничение такое, что все значения в индексе должны быть различными. Произошла ошибка, если вы попытаетесь добавить новую строку с ключевым значением, которое соответствует существующей строке. Это ограничение не применяется к значениям NULL, за исключением механизма хранения BDB. Для других двигателей индекс UNIQUE допускает множество значений NULL для столбцов, которые могут содержать NULL. Если вы укажете префиксное значение для столбца в индексе UNIQUE, значения столбца должны быть уникальными внутри префикса.

0

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

if exists 
    select 1 from table 
    where col2 = inputCol2 and col3 = inputCol3 
then -- combo already exists 
    do nothing/set error 
else -- combo doesnt exist yet 
    insert into table 
Смежные вопросы