How to find all the relations between all mysql tables?

前端 未结 9 1953
甜味超标
甜味超标 2020-12-01 01:12

How to find all the relations between all MySQL tables? If for example, I want to know the relation of tables in a database of having around 100 tables.

Is there any

相关标签:
9条回答
  • 2020-12-01 01:40

    Try

    SELECT
    `TABLE_NAME`,
    `COLUMN_NAME`,
    `REFERENCED_TABLE_NAME`,
    `REFERENCED_COLUMN_NAME`
    FROM `information_schema`.`KEY_COLUMN_USAGE`
    WHERE `CONSTRAINT_SCHEMA` = 'YOUR_DATABASE_NAME' AND
    `REFERENCED_TABLE_SCHEMA` IS NOT NULL AND
    `REFERENCED_TABLE_NAME` IS NOT NULL AND
    `REFERENCED_COLUMN_NAME` IS NOT NULL

    do not forget to replace YOUR_DATABASE_NAME with your database name!

    0 讨论(0)
  • 2020-12-01 01:41
    
    SELECT 
        count(1) totalrelationships ,
        c.table_name tablename,
        CONCAT(' ',GROUP_CONCAT(c.column_name ORDER BY ordinal_position SEPARATOR ', ')) columnname,
        CONCAT(' ',GROUP_CONCAT(c.column_type ORDER BY ordinal_position SEPARATOR ', ')) columntype    
    FROM
        information_schema.columns c RIGHT JOIN
        (SELECT column_name , column_type FROM information_schema.columns WHERE 
        -- column_key in ('PRI','MUL') AND  -- uncomment this line if you want to see relations only with indexes
        table_schema = DATABASE() AND table_name = 'YourTableName') AS p
        USING (column_name,column_type)
    WHERE
        c.table_schema = DATABASE()
        -- AND c.table_name != 'YourTableName'
        GROUP BY tablename
        -- HAVING (locate(' YourColumnName',columnname) > 0) -- uncomment this line to search for specific column 
        ORDER BY totalrelationships desc, columnname
    ;
    
    0 讨论(0)
  • 2020-12-01 01:41

    Based on xudre's answer, you can execute the following to see all the relations of a schema:

    SELECT 
      `TABLE_SCHEMA`,                          -- Foreign key schema
      `TABLE_NAME`,                            -- Foreign key table
      `COLUMN_NAME`,                           -- Foreign key column
      `REFERENCED_TABLE_SCHEMA`,               -- Origin key schema
      `REFERENCED_TABLE_NAME`,                 -- Origin key table
      `REFERENCED_COLUMN_NAME`                 -- Origin key column
    FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`
    WHERE `TABLE_SCHEMA` = 'YourSchema'
    AND   `REFERENCED_TABLE_NAME` IS NOT NULL  -- Only tables with foreign keys
    

    What I want in most cases is to know all FKs that point to a specific table. In this case I run:

    SELECT 
      `TABLE_SCHEMA`,                          -- Foreign key schema
      `TABLE_NAME`,                            -- Foreign key table
      `COLUMN_NAME`                            -- Foreign key column
    FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE`  
    WHERE `TABLE_SCHEMA` = 'YourSchema'
    AND   `REFERENCED_TABLE_NAME` = 'YourTableName'
    
    0 讨论(0)
提交回复
热议问题