3

自動インクリメント識別子を持たないデータベース内のすべてのテーブルですべての主キーを検索する方法。大量のテーブルがあり、主キーに自動インクリメント識別子がないすべてのテーブルを識別したいと思います。

4

2 に答える 2

6

この情報はinformation_schema.columnsテーブルから抽出できます

select distinct table_name
from information_schema.columns
where table_schema = 'DATABASENAME'
      and table_name not in (select table_name
                             from information_schema.columns
                             where table_schema = 'DATABASENAME'
                                   and column_key = 'PRI'
                                   and data_type = 'int'
                                   and extra = 'auto_increment')

これにより、列を持つ1つのデータベース内のすべてのテーブルが検索されauto_increment、残りのテーブルが返されます。これにより、複合キーを持つテーブルも正しく検出されます。

于 2013-03-19T13:56:07.740 に答える
2

そのような情報は表にありますinformation_schema.columns。列column_keyはになり、自動インクリメントされる場合PRIは列extraに含まれます。auto_increment

SELECT
    table_schema,
    table_name,
    column_name
FROM
    information_schema.columns
WHERE
    column_key = 'PRI'
    AND extra <> 'auto_increment'
    AND data_type = 'int'

このSQLフィドルでは、サンプルテーブルのそれぞれの列に「PRI」と「auto_increment」があることがわかります。

于 2013-03-19T13:59:44.277 に答える