2015-11-12 3 views
0

Как вы собираетесь создавать таблицу с ограничением в MySQL, которая применяется только к одной конкретной таблице, где вы хотите, чтобы 1 уникальное поле для каждой уникальной записи?MySQL Constraint для уникальных значений

Например, допустим, что у меня есть таблица под названием "человек" со следующими полями:

  1. person_social_security (первичный ключ)
  2. person_id
  3. PERSON_NAME
  4. person_phone_extension

Для каждой записи, я хочу убедиться, что поле №3 (person_phone _extension) также всегда уникален для каждого person_id. Другими словами, у person_id никогда не должно быть дубликата person_phone_extension. Однако другой person_id может иметь то же самое person_phone_extension как еще person_id. В этой таблице может быть несколько экземпляров person_id.

+0

если 'person_id' не является уникальным не может быть' первичным key' – Alex

+0

True. Изменил пример, чтобы исправить эту ошибку. –

+0

Если я понимаю вас, у вас может быть несколько записей с одним и тем же person_id, так что же представляет этот столбец? –

ответ

2

http://sqlfiddle.com/#!9/df732/2

просто установить UNIQUE KEY против вашей колонки:

create table person (
person_id int auto_increment primary key, 
person_name varchar(50), 
person_phone_extension int unique key); 

используя мою скрипку вы можете увидеть, если вы раскомментировать мой последний запрос, который будет приносить ошибку MySQL о дублированном значении.

ОБНОВЛЕНИЕ В соответствии с вашими новыми комментариями person_id не является первичным ключом и не является уникальным. Но следует проверить комбинацию person_id + person_phone_extension. Таким образом, вы должны установить ключ от этих 2 колонки, как:

http://sqlfiddle.com/#!9/51547/1

create table person (
person_id int, 
person_name varchar(50), 
person_phone_extension int, 
unique key idx (person_id,person_phone_extension)); 
+0

Этот сайт для скриптов SQL является отличным для тестирования! Хотя это не совсем то, что я искал. У каждого человека_id не может быть дубликата person_phone_extension, но у другого person_id может быть одно и то же person_phone_extension. Я отредактирую свой первоначальный вопрос, чтобы быть немного более ясным. –

Смежные вопросы