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')

这将查找一个数据库中具有一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 Fiddle中,您可以看到示例表在各自的列中具有“PRI”和“auto_increment”。

于 2013-03-19T13:59:44.277 回答