Нельзя создать ограничение CHECK, которое ссылается на другие строки. Он должен оцениваться в одной строке.
Но вы можете сделать ограничение CHECK, которое требует, чтобы меньшее значение идентификатора было в первом столбце.
mysql> create table referrals (
referral1 int,
referral2 int,
check (referral1 < referral2)
);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into referrals values (1,2);
Query OK, 1 row affected (0.01 sec)
mysql> insert into referrals values (2,1);
ERROR 3819 (HY000): Check constraint 'referrals_chk_1' is violated.
Тогда вы можете предотвратить более одно направление между двумя людьми, поместив КЛЮЧ UNQIUE в эти два столбца.
alter table referrals add unique key (referral1, referral2);
Если ограничение CHECK требует, чтобы первое число было меньшим, а ограничение UNIQUE KEY гарантирует, что те же самые два числа не он может появиться уже в другой строке, что предотвратит повторное появление одной и той же пары людей.
Вы также хотели бы, чтобы столбец в таблице указывал, какой из двух людей ссылается, а какой - упомянутый.
Обратите внимание, что ограничения CHECK поддерживаются только в MySQL 8.0.16 и более поздних версиях. Если вы используете более раннюю версию MySQL, их можно смоделировать с помощью триггера .