Votre problème est que vous ne nommez pas explicitement vos contraintes. Cela laisse chaque base de données choisir un nom pour vous. L'astuce ici consiste à nommer explicitement vos contraintes de clé étrangère, lorsque vous créez les tables réelles à la fois sur MySQL et MariaDB :
CREATE TABLE job_template (
...,
parent_id int NOT NULL,
CONSTRAINT your_constraint FOREIGN KEY fk_name (parent_id)
REFERENCES job_template(id) ON DELETE CASCADE
);
Mais régler votre situation immédiate nécessiterait plus de travail. Une option consisterait à interroger la table de schéma d'informations, pour la table concernée, afin de connaître les noms réels des contraintes :
USE INFORMATION_SCHEMA;
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM KEY_COLUMN_USAGE
WHERE
TABLE_SCHEMA = 'your_db' AND
TABLE_NAME = 'job_template' AND
REFERENCED_COLUMN_NAME IS NOT NULL;
Cela devrait renvoyer un enregistrement pour chaque colonne et contrainte. Avec ces informations, vous devriez être en mesure d'exécuter vos instructions alter actuelles.
C'est assez facile à faire en utilisant un outil comme Java, ou quelque chose de similaire. Si vous souhaitez le faire directement à partir de la base de données, vous aurez besoin de SQL dynamique, ce qui signifie probablement écrire une procédure stockée.