2008-12-05 2 views
5

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

Я хочу, чтобы строки не добавлялись в базу данных, когда несколько значений равны существующим значениям. Например, если a2 = a1 AND b2 = b1, тогда данные будут отклонены. Если разрешено только a2 = a1 или только b2 = b1. В основном я хочу, чтобы он работал как первичный ключ, который требует совпадения обоих значений.

Я знаю, что могу сделать это с помощью проверки, прежде чем писать в базу данных - например. выберите *, где a = 'a2' и b = 'b2', а затем не записывайте новые данные, когда я получаю результаты. Я бы предпочел включить настройку MySQL, например, первичный ключ, который автоматически блокирует данные.

Я не очень хорошо знаком с MySQL за пределами основных функций, поэтому приношу извинения, если это тривиально легко. Поиск в Google для всех видов уникального индекса и первичного ключа не помог.

ответ

10

Создайте уникальный индекс для столбцов, которые вы хотите быть уникальными.

Например:

CREATE UNIQUE INDEX index_name ON table(col1, col2); 

Смотрите MySQL Create index manual.

+0

http: // dev.mysql.com/doc/refman/4.1/en/create-index.html – Chris 2008-12-05 01:13:45

0

Вы хотите использовать синтаксис MySQL CONSTRAINT при создании таблицы (или изменить существующую таблицу).

+0

http://dev.mysql.com/doc/refman/4.1/ru/constraint-primary-key.html – Chris 2008-12-05 01:16:13

0

В дополнение к тому, что говорит gcores, я хотел бы добавить, что ваше альтернативное предложение о проверке на прикладном уровне - это плохо. Что произойдет, если два приложения пытаются вставить одни и те же данные, и они чередуются? Они могут проверять, видеть, что данных нет, а затем оба вставить. Если вы используете уникальный индекс, есть два преимущества:

  • Пользователю не нужно проверять, существует ли это значение больше. Они просто пытаются выполнить операцию, и если она терпит неудачу, это означает, что значение уже существует. Это немного снижает нагрузку на вашу базу данных и упрощает логику приложения.
  • База данных всегда будет действительной, поскольку она сама применяет правила. Гораздо проще работать с базой данных, когда вы можете рассуждать о жестких правилах, а не о том, что «мы ожидаем, что дубликатов не будет, но это технически возможно ...»
Смежные вопросы