Даже если вы добьетесь корректной работы правила, то оно все равно не полноценно, ибо контролирует дублирование только первичного ключа, а в таблице могут быть и уникальные ключи, которые корректно отрабатываются через INSERT… ON DUPLICATE KEY UDPATE в мускуле.
Нет, как раз с этим проблем никаких нет. Условие, по которому выполняется правило — в данном примере «WHERE (EXISTS ( SELECT x.id FROM x WHERE x.id = new.id))» — но вы можете задать абсолютно любое.
Эмулируем ON DUPLICATE KEY UDPATE — подводный камень