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.columns
和 is_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
。
对于 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 - 检查列是不是自动递增的主要内容,如果未能解决你的问题,请参考以下文章
在 MS SQL 2005 或 2008 中自动递增多个标识列
如何使用 PostgreSQL 在 DBeaver 中创建自动递增/SERIAL id 列?