O link que você postou como um comentário à resposta de Nerd-Herd usa diferido restrições. Essas restrições são verificadas no final da transação e não no momento em que a instrução é executada.
O MySQL não suporta restrições adiadas
Se você realmente precisa de restrições adiadas e deseja manter um banco de dados de código aberto, precisará migrar para o PostgreSQL.