Ваша проблема в том, что вы явно не называете свои ограничения.Это оставляет каждую базу данных, чтобы выбрать имя для вас.Хитрость заключается в том, чтобы явно указывать ограничения внешнего ключа, когда вы создаете фактические таблицы на MySQL и 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
);
Но исправление вашей непосредственной ситуации потребует больше работы.Одним из вариантов может быть запрос к таблице информационной схемы для соответствующей таблицы, чтобы узнать действительные имена ограничений:
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;
Это должно вернуть одну запись для каждого столбца и ограничения.Получив эту информацию, вы сможете запускать текущие операторы alter.
Это достаточно просто сделать с помощью такого инструмента, как Java, или чего-то подобного.Если вы хотите сделать это непосредственно из базы данных, вам потребуется динамический SQL, что, вероятно, означает написание хранимой процедуры.