Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara Performa untuk Mendaftar Kunci Asing untuk Tabel MySQL?

SequelPro dan Magento keduanya menggunakan kueri SHOW CREATE TABLE untuk memuat informasi kunci asing. Implementasi Magento adalah salah satu yang akan saya rujuk karena keduanya merupakan sistem berbasis PHP dan salah satu yang sangat kita kenal. Namun, cuplikan kode berikut dapat diterapkan ke sistem berbasis PHP apa pun.

Penguraian dilakukan di Varien_Db_Adapter_Pdo_Mysql::getForeignKeys() metode (kode untuk kelas ini dapat ditemukan di sini ) menggunakan RegEx yang relatif sederhana:


    $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] : ''
        );
    }

Di blok doc itu menggambarkan array yang dihasilkan sebagai berikut:


    /**
     * 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
     */

Saya tahu itu tidak persis apa yang Anda minta karena menggunakan output SHOW CREATE TABLE, tetapi berdasarkan temuan saya, ini tampaknya merupakan cara yang diterima secara umum dalam melakukan sesuatu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Impor file .sql besar ke MySQL

  2. Apa konvensi penamaan yang tepat untuk FK MySQL?

  3. MySQL - memilih di dekat titik spasial

  4. Bagaimana cara membuat Django bekerja dengan driver MySQL yang tidak didukung seperti gevent-mysql atau driver MySQL Concurrence?

  5. Bagaimana cara menarik data dari database mysql dan memvisualisasikannya dengan D3.JS?