問題は、制約に明示的に名前を付けていないことです。これにより、各データベースが名前を選択できるようになります。ここでの秘訣は、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
);
しかし、あなたの当面の状況を修正するには、より多くの作業が必要になります。 1つのオプションは、関連するテーブルの情報スキーマテーブルをクエリして、実際の制約名を見つけることです。
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;
これにより、列と制約ごとに1つのレコードが返されます。この情報があれば、現在のalterステートメントを実行できるはずです。
これは、Javaなどのツールを使用して行うのに十分簡単です。これをデータベースから直接実行する場合は、動的SQLが必要になります。これは、おそらくストアドプロシージャを作成することを意味します。