Le lien que vous avez publié en tant que commentaire à la réponse de Nerd-Herd utilise différé contraintes. Ces contraintes sont vérifiées à la fin de la transaction plutôt qu'au moment où l'instruction est exécutée.
MySQL ne prend pas en charge les contraintes différées
Si vous avez absolument besoin de contraintes différées et que vous souhaitez vous en tenir à une base de données open source, vous devrez migrer vers PostgreSQL.