Vấn đề của bạn là bạn không đặt tên rõ ràng cho các ràng buộc của mình. Điều này để lại mỗi cơ sở dữ liệu để chọn một tên cho bạn. Mẹo ở đây là đặt tên cho các ràng buộc khóa ngoại của bạn một cách rõ ràng, khi bạn tạo các bảng thực tế trên cả MySQL và 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
);
Nhưng việc khắc phục tình trạng trước mắt của bạn sẽ đòi hỏi nhiều công việc hơn. Một tùy chọn sẽ là truy vấn bảng giản đồ thông tin, đối với bảng có liên quan, để tìm ra các tên ràng buộc thực tế:
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;
Điều này sẽ trả về một bản ghi cho mọi cột và ràng buộc. Với thông tin này, bạn sẽ có thể chạy các câu lệnh thay thế hiện tại của mình.
Điều này đủ dễ dàng để thực hiện bằng cách sử dụng một công cụ như Java hoặc một cái gì đó tương tự. Nếu bạn muốn thực hiện việc này trực tiếp từ cơ sở dữ liệu, thì bạn sẽ cần SQL động, có thể có nghĩa là viết một thủ tục được lưu trữ.