-1

Предположим, есть таблица со столбцами a и b и составным уникальным ключом из пары a,b . И есть строка a=1, b=2 .

Поэтому я не могу вставить другую строку a=1, b=2 , это нормально.

Но как я мог отрицать в этой ситуации также вставку строки a=2, b=1 ?

Например:

CREATE TABLE `t` (`a` INT, `b` INT); 
ALTER TABLE `t` ADD UNIQUE(`a`, `b`); 
INSERT INTO `t` (`a`, `b`) VALUES ('1', '2'); 
INSERT INTO `t` (`a`, `b`) VALUES ('2', '1');

Вторая вставка работает, хотя я ожидаю, что она потерпит неудачу.

1 ответ1

2

Вы не можете с определением ключа / индекса. С точки зрения БД значения (1,2) и (2,1) всегда будут разными.

Решение состоит в том, чтобы гарантировать, что, например, a всегда имеет более высокое значение, чем b или наоборот. Вы можете убедиться в этом в приложении, которое добавляет запись, или в качестве триггера БД.

Смотрите также: Уникальная комбинация ключей MySQL, в которой есть пример того, как сделать это с помощью триггера.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .