【问题标题】: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

标签: mysql sql sql-server auto-increment


【解决方案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 列中是您要查找的内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 2014-04-15
      • 2016-03-15
      • 1970-01-01
      • 2016-11-22
      • 2017-03-24
      相关资源
      最近更新 更多