Этот триггер сделает работу:
DELIMITER $$
CREATE
TRIGGER `db`.`on_points_before_insert` BEFORE INSERT
ON `db`.`points`
FOR EACH ROW BEGIN
DECLARE num_reg INT;
SELECT COUNT(*) FROM points WHERE
(p1 = new.p1 AND p2 = new.p2) OR (p1 = new.p2 AND p2 = new.p1) INTO num_reg;
IF(num_reg != 0) THEN
CALL my_non_existant_procedure();
END IF;
END$$
DELIMITER ;
Я просто проверяю, есть ли комбинация значений, которые вы пытаетесь вставить, подсчитывая количество записей, возвращаемых условием (p1 = new.p1 AND p2 = new.p2) OR (p1 = new.p2 AND p2 = new.p1)
, и, если это число отличается от 0, я вызываю несуществующую процедуру чтобы вызвать сбой триггера и избежать вставки новой записи.