Я думаю, что это можно сделать только с помощью триггера FOR INSERT (в сочетании с уникальным ограничением на два столбца). Я не очень хорошо разбираюсь в синтаксисе MySql (мой T-SQL лучше), поэтому я предполагаю, что следующее будет содержать некоторые ошибки:
Редактировать: Очистить синтаксис, чтобы он работал для MySQL. Кроме того, обратите внимание, что вы, вероятно, захотите использовать это как BEFORE UPDATE
триггер (с другим именем, конечно).
Кроме того, этот метод основан на наличии первичного или иного уникального ключа в двух полях (т. Е. Этот триггер проверяет, что обратное еще не существует). Похоже, нет никакого способа выбросить ошибку триггер, так что я смею сказать, что это так хорошо, как он получает.
CREATE TRIGGER tr_CheckDuplicates_insert
BEFORE INSERT ON t
FOR EACH ROW
BEGIN
DECLARE rowCount INT;
SELECT COUNT(*) INTO rowCount
FROM t
WHERE a = NEW.b AND b = NEW.a;
IF rowCount > 0 THEN
-- Oops, we need a temporary variable here. Oh well.
-- Switch the values so that the key will cause the insert to fail.
SET rowCount = NEW.a, NEW.a = NEW.b, NEW.b = rowCount;
END IF;
END;