आपकी समस्या यह है कि आप स्पष्ट रूप से अपनी बाधाओं का नामकरण नहीं कर रहे हैं। यह प्रत्येक डेटाबेस को आपके लिए एक नाम चुनने के लिए छोड़ देता है। जब आप 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;
यह प्रत्येक कॉलम और बाधा के लिए एक रिकॉर्ड वापस करना चाहिए। इस जानकारी के साथ, आपको अपने वर्तमान परिवर्तन कथन चलाने में सक्षम होना चाहिए।
जावा, या कुछ इसी तरह के टूल का उपयोग करना काफी आसान है। यदि आप इसे सीधे डेटाबेस से करना चाहते हैं, तो आपको डायनेमिक SQL की आवश्यकता होगी, जिसका अर्थ संभवतः एक संग्रहीत कार्यविधि लिखना है।