sql >> データベース >  >> RDS >> Mysql

2つのデータベースの構造を比較しますか?

    MySQLデータベースの場合、次のクエリを使用してビューとテーブル(列名と列タイプ)を比較できます。

    SET @firstDatabaseName = '[first database name]';
    SET @secondDatabaseName = '[second database name]';
    
    SELECT * FROM  
      (SELECT
          CONCAT(cl.TABLE_NAME, ' [', cl.COLUMN_NAME, ', ', cl.COLUMN_TYPE, ']') tableRowType
        FROM information_schema.columns cl,  information_schema.TABLES ss
        WHERE
          cl.TABLE_NAME = ss.TABLE_NAME AND
          cl.TABLE_SCHEMA = @firstDatabaseName AND
          ss.TABLE_TYPE IN('BASE TABLE', 'VIEW')
        ORDER BY
          cl.table_name ) AS t1
    LEFT JOIN                     
      (SELECT
          CONCAT(cl.TABLE_NAME, ' [', cl.COLUMN_NAME, ', ', cl.COLUMN_TYPE, ']') tableRowType
        FROM information_schema.columns cl,  information_schema.TABLES ss
        WHERE
          cl.TABLE_NAME = ss.TABLE_NAME AND
          cl.TABLE_SCHEMA = @secondDatabaseName AND
          ss.TABLE_TYPE IN('BASE TABLE', 'VIEW')
        ORDER BY
          cl.table_name ) AS t2 ON t1.tableRowType = t2.tableRowType
    WHERE 
      t2.tableRowType IS NULL        
    UNION 
    SELECT * FROM  
      (SELECT
          CONCAT(cl.TABLE_NAME, ' [', cl.COLUMN_NAME, ', ', cl.COLUMN_TYPE, ']') tableRowType
        FROM information_schema.columns cl,  information_schema.TABLES ss
        WHERE
          cl.TABLE_NAME = ss.TABLE_NAME AND
          cl.TABLE_SCHEMA = @firstDatabaseName AND
          ss.TABLE_TYPE IN('BASE TABLE', 'VIEW')
        ORDER BY
          cl.table_name ) AS t1
    RIGHT JOIN                     
      (SELECT
          CONCAT(cl.TABLE_NAME, ' [', cl.COLUMN_NAME, ', ', cl.COLUMN_TYPE, ']') tableRowType
        FROM information_schema.columns cl,  information_schema.TABLES ss
        WHERE
          cl.TABLE_NAME = ss.TABLE_NAME AND
          cl.TABLE_SCHEMA = @secondDatabaseName AND
          ss.TABLE_TYPE IN('BASE TABLE', 'VIEW')
        ORDER BY
          cl.table_name ) AS t2 ON t1.tableRowType = t2.tableRowType
    WHERE 
      t1.tableRowType IS NULL;
    

    UIでツールを使用したい場合は、このスクリプトを使用することもできます https://github.com/dlevsha/compalex テーブル、ビュー、キーなどを比較できます。

    スクリーンショット(表を比較)



    1. Tableが最適化をサポートしておらず、代わりに再作成+分析を行うとはどういう意味ですか?

    2. SQLAlchemy-テーブルのリストを取得する

    3. クエリでの日付形式の変更

    4. テーブルからのデータと一緒にすべての日付を取得します