Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एसक्यूएल:स्वत:उत्पन्न बाधा के कारण विदेशी कुंजी नहीं छोड़ सकता

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Illuminate\Database\QueryException को कैसे ठीक करें:SQLSTATE [HY000] [1044] उपयोगकर्ता के लिए प्रवेश निषेध

  2. PHP का उपयोग करके MYSQL तालिका में रेडियो बटन मान जोड़ना

  3. रिटर्निंग JSON ठीक से काम नहीं कर रहा है

  4. OuterRef . के साथ सरल सबक्वेरी

  5. मैं मैक पर कमांड लाइन MySQL क्लाइंट कैसे स्थापित करूं?