Вы можете сделать это без триггера в MySQL, используя самые последние версии MySQL.
create table users (
id int(11),
ssn varchar(100),
foreigner tinyint(1) default 0,
foreigner_ssn tinyint generated always as (case when foreigner = 0 then ssn end) store unique
);
Это создает новый сгенерированный столбец. Уникальные индексы MySQL для повторения NULL
значений, поэтому условие действительно только на foreigner = 0
.
Вы могли бы упростить это, просто указав ssn
равным NULL
при foreigner = 0
и объявив его unique
.