SQL - 检查列是不是自动递增

Posted

技术标签:

【中文标题】SQL - 检查列是不是自动递增【英文标题】:SQL - Check if a column auto incrementsSQL - 检查列是否自动递增 【发布时间】:2012-11-26 03:48:25 【问题描述】:

我正在尝试运行查询以检查列是否自动递增。我可以检查类型、默认值、它是否可以为空等,但我不知道如何测试它是否自动递增。以下是我测试其他内容的方法:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'my_table'
AND COLUMN_NAME = 'my_column'
AND DATA_TYPE = 'int'
AND COLUMN_DEFAULT IS NULL
AND IS_NULLABLE = 'NO'
--AND AUTO_INCREMENTS = 'YES'

很遗憾,没有可比较的 AUTO_INCREMENTS 列。那么如何测试列是否自动递增?

【问题讨论】:

您使用的是哪个 DBMS? PostgreSQL? SQL 服务器? mysql @a_horse_with_no_name - SQL Server 和 MySQL。 SHOW CREATE TABLE my_table 【参考方案1】:

对于 MySql,请查看EXTRA 列:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'my_table'
    AND COLUMN_NAME = 'my_column'
    AND DATA_TYPE = 'int'
    AND COLUMN_DEFAULT IS NULL
    AND IS_NULLABLE = 'NO'
    AND EXTRA like '%auto_increment%'

对于 Sql Server,使用 sys.columnsis_identity 列:

SELECT 
    is_identity
FROM sys.columns
WHERE 
    object_id = object_id('my_table')
    AND name = 'my_column'

【讨论】:

对于 SQL Server 不正确,因为您可以拥有一个在身份插入设置为 ON 时不会自动递增的身份列【参考方案2】:

假设 MySQL,EXTRA 列会指示是否为AUTO_INCREMENT

|表目录 |表模式 | ... |额外 | ... | -------------------------------------------------- ------------ |定义 | db_2_00314 | ... |自动增量 | ... |

对于 MSSQL,see here。

【讨论】:

【参考方案3】:

这适用于 sql server:

    Select COLUMN_NAME, TABLE_NAME
    from INFORMATION_SCHEMA.COLUMNS
    where TABLE_SCHEMA = 'dbo'
    and COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
    order by TABLE_NAME

【讨论】:

您能否详细说明这是如何解决请求者的问题的? 我知道这个问题有点过时了,但对于任何关注历史和想知道的人,如果您不想访问 sys 架构,我可以确认此解决方案确实有效。【参考方案4】:

运行:描述'table_name';在 EXTRA 列中是您要查找的内容

【讨论】:

以上是关于SQL - 检查列是不是自动递增的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sql developer 设置自动递增列

在 MS SQL 2005 或 2008 中自动递增多个标识列

如果我们使用自动递增的标识列和PK,则违反3NF

如何使用 PostgreSQL 在 DBeaver 中创建自动递增/SERIAL id 列?

[QT][SQL]sql学习记录5_sqlite Autoincrement(自动递增)

sqlserver字段如何自动更新