Uw probleem is dat u uw beperkingen niet expliciet noemt. Hierdoor kan elke database een naam voor u kiezen. De truc hier is om uw externe sleutelbeperkingen expliciet een naam te geven, wanneer u de daadwerkelijke tabellen op zowel MySQL als MariaDB maakt:
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
);
Maar het oplossen van uw directe situatie zou meer werk vergen. Een optie zou zijn om de informatieschematabel op te vragen voor de betreffende tabel, om de werkelijke namen van de beperkingen te achterhalen:
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;
Dit zou één record moeten retourneren voor elke kolom en beperking. Met deze informatie zou u in staat moeten zijn om uw huidige wijzigingsverklaringen uit te voeren.
Dit is eenvoudig genoeg om te doen met een tool als Java of iets dergelijks. Als u dit rechtstreeks vanuit de database wilt doen, heeft u dynamische SQL nodig, wat waarschijnlijk betekent dat u een opgeslagen procedure moet schrijven.