我正在使用sqlite数据库,我想知道特定列是否为AUTOINCREMENT
我试过
PRAGMA table_info('table name') ;
但它只给我ID,NAME,TYPE,PRIMARY KEY,NOT NULL和DEFAULT VALUE
答案 0 :(得分:7)
使用
查询PRAGMA TABLE_INFO(yourtable);
您可以获取主键列名称。
要检查它是否是自动增量列,请检查该表是否具有自动增量序列:
SELECT COUNT(*) FROM sqlite_sequence WHERE name='yourtable';
解读:
如果计数结果为非零,则该表具有自动增量主键列。
如果计数结果为零,则该表为空且从未包含数据,或者没有自动增量主键列。
虽然SQLite documentation似乎暗示在创建表时填充sqlite_sequence表实际上并非如此,并且只有在插入数据后才能使用计数。
答案 1 :(得分:1)
原谅我,因为我犯了罪:
WITH RECURSIVE
a AS (
SELECT name, lower(replace(replace(sql, char(13), ' '), char(10), ' ')) AS sql
FROM sqlite_master
WHERE lower(sql) LIKE '%integer% autoincrement%'
),
b AS (
SELECT name, trim(substr(sql, instr(sql, '(') + 1)) AS sql
FROM a
),
c AS (
SELECT b.name, sql, '' AS col
FROM b
UNION ALL
SELECT
c.name,
trim(substr(c.sql, ifnull(nullif(instr(c.sql, ','), 0), instr(c.sql, ')')) + 1)) AS sql,
trim(substr(c.sql, 1, ifnull(nullif(instr(c.sql, ','), 0), instr(c.sql, ')')) - 1)) AS col
FROM c JOIN b ON c.name = b.name
WHERE c.sql != ''
),
d AS (
SELECT name, substr(col, 1, instr(col, ' ') - 1) AS col
FROM c
WHERE col LIKE '%autoincrement%'
)
SELECT name, col
FROM d
ORDER BY name, col;
此查询基于两个假设:
autoincrement
sqlite_master
标记
integer
(当前SQLite需要)由于正则表达式不可用,因此该查询使用递归方法匹配所有列。请原谅我。
您也可以在某个客户端处理sqlite_master.sql
内容,例如:一个Java程序,使用简单的正则表达式,如果这对你来说更容易。