Уникальный ключ в MySql - PullRequest
       13

Уникальный ключ в MySql

0 голосов
/ 12 марта 2010

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

Я хочу сказать, как.

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

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

Ответы [ 3 ]

1 голос
/ 12 марта 2010

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

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

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

ALTER TABLE YourTable ADD UNIQUE (Col2,Col3);
1 голос
/ 12 марта 2010

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

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

Из этого документа:

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

0 голосов
/ 12 марта 2010

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

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
...