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

एक MySQL तालिका के लिए विदेशी कुंजी सूचीबद्ध करने का प्रदर्शनकारी तरीका?

SequelPro और Magento दोनों विदेशी कुंजी जानकारी लोड करने के लिए SHOW CREATE TABLE क्वेरी का उपयोग करते हैं। मैगेंटो का कार्यान्वयन वह है जिसे मैं संदर्भित करने जा रहा हूं क्योंकि यह एक PHP आधारित प्रणाली है और एक जिससे हम दोनों बहुत परिचित हैं। हालांकि, निम्नलिखित कोड स्निपेट किसी भी PHP आधारित सिस्टम पर लागू किए जा सकते हैं।

पार्सिंग Varien_Db_Adapter_Pdo_Mysql::getForeignKeys() में की जाती है विधि (इस वर्ग के लिए कोड यहां पाया जा सकता है ) अपेक्षाकृत सरल RegEx का उपयोग करना:


    $createSql = $this->getCreateTable($tableName, $schemaName);

    // collect CONSTRAINT
    $regExp  = '#,\s+CONSTRAINT `([^`]*)` FOREIGN KEY \(`([^`]*)`\) '
        . 'REFERENCES (`[^`]*\.)?`([^`]*)` \(`([^`]*)`\)'
        . '( ON DELETE (RESTRICT|CASCADE|SET NULL|NO ACTION))?'
        . '( ON UPDATE (RESTRICT|CASCADE|SET NULL|NO ACTION))?#';
    $matches = array();
    preg_match_all($regExp, $createSql, $matches, PREG_SET_ORDER);
    foreach ($matches as $match) {
        $ddl[strtoupper($match[1])] = array(
            'FK_NAME'           => $match[1],
            'SCHEMA_NAME'       => $schemaName,
            'TABLE_NAME'        => $tableName,
            'COLUMN_NAME'       => $match[2],
            'REF_SHEMA_NAME'    => isset($match[3]) ? $match[3] : $schemaName,
            'REF_TABLE_NAME'    => $match[4],
            'REF_COLUMN_NAME'   => $match[5],
            'ON_DELETE'         => isset($match[6]) ? $match[7] : '',
            'ON_UPDATE'         => isset($match[8]) ? $match[9] : ''
        );
    }

doc ब्लॉक में यह परिणामी सरणी का वर्णन इस प्रकार करता है:


    /**
     * The return value is an associative array keyed by the UPPERCASE foreign key,
     * as returned by the RDBMS.
     *
     * The value of each array element is an associative array
     * with the following keys:
     *
     * FK_NAME          => string; original foreign key name
     * SCHEMA_NAME      => string; name of database or schema
     * TABLE_NAME       => string;
     * COLUMN_NAME      => string; column name
     * REF_SCHEMA_NAME  => string; name of reference database or schema
     * REF_TABLE_NAME   => string; reference table name
     * REF_COLUMN_NAME  => string; reference column name
     * ON_DELETE        => string; action type on delete row
     * ON_UPDATE        => string; action type on update row
     */

मुझे पता है कि यह बिल्कुल नहीं है आप क्या मांग रहे थे क्योंकि यह तालिका बनाएं आउटपुट का उपयोग कर रहा है, लेकिन मेरे निष्कर्षों के आधार पर, यह चीजों को करने का आम तौर पर स्वीकृत तरीका प्रतीत होता है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. लगातार मूल्यों द्वारा MySQL समूह

  2. MySQL ऑटोइनक्रिकमेंट कॉलम 10 से कूदता है- क्यों?

  3. इस हफ्ते सबसे ज्यादा देखे गए वीडियो

  4. QMYSQL ड्राइवर QT5.2 में लोड क्यों नहीं हुआ?

  5. ट्रिगर का उपयोग करके MySQL में एक टेबल पर फ़ेकिंग ऑटो इंक्रीमेंट इंक्रीमेंट