У меня очень простая проблема и решение, которое будет работать, но я ищу более простое.
Я хотел бы предотвратить добавление строк в базу данных, когда несколько значений равны существующим значениям. Например, если a2 = a1 AND b2 = b1, то данные отклоняются. Если только a2 = a1 или только b2 = b1, это разрешено. В основном я хочу, чтобы он действовал как первичный ключ, который требует совпадения обоих значений.
Я знаю, что могу сделать это с помощью проверки, прежде чем писать в базу данных - например. выберите *, где a = 'a2' и b = 'b2', а затем избегайте записи новых данных, когда я получаю результаты. Я бы предпочел включить параметр MySQL, например первичный ключ, который будет автоматически блокировать такие данные.
Я не очень хорошо знаком с MySQL за пределами основных функций, поэтому извиняюсь, если это тривиально просто. Поиск в Google всевозможных вещей, связанных с уникальным индексом и первичным ключом, не помог.






Создайте уникальный индекс для столбцов, которые должны быть уникальными.
Например:
CREATE UNIQUE INDEX index_name ON table(col1, col2);
См. MySQL Создать указатель руководства.
Вы хотите использовать синтаксис MySQL CONSTRAINT при создании своей таблицы (или изменить существующую таблицу).
В дополнение к тому, что говорит gcores, я хотел бы добавить, что ваше альтернативное предложение о проверке на уровне приложения - плохая вещь. Что произойдет, если два приложения попытаются вставить одни и те же данные, и они чередуются? Они оба могут проверить, увидеть, что данных нет, а затем оба вставить. Если вы используете уникальный индекс, есть два преимущества: