我正在使用sqlite数据库,我想知道特定列是否为AUTOINCREMENT
我试过了
PRAGMA table_info('table name') ;
Run Code Online (Sandbox Code Playgroud)
但它只给我ID,NAME,TYPE,PRIMARY KEY,NOT NULL和DEFAULT VALUE
查询
PRAGMA TABLE_INFO(yourtable);
Run Code Online (Sandbox Code Playgroud)
您可以获取主键列名称.
要检查它是否是自动增量列,请检查该表是否具有自动增量序列:
SELECT COUNT(*) FROM sqlite_sequence WHERE name='yourtable';
Run Code Online (Sandbox Code Playgroud)
解释:
如果计数出现为非零,则表具有自动增量主键列.
如果计数结果为零,则该表为空且从未包含数据,或者没有自动增量主键列.
虽然SQLite文档似乎暗示在创建表时填充sqlite_sequence表实际上并非如此,并且只有在插入数据后计数才可用.
原谅我,因为我犯了罪:
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;
Run Code Online (Sandbox Code Playgroud)
此查询基于两个假设:
autoincrement标志存在于您的列定义中sqlite_masterinteger(根据 SQLite 当前的要求)由于正则表达式不是开箱即用的,因此此查询使用递归方法来匹配所有列。请原谅我。
您还可以sqlite_master.sql使用简单的正则表达式在某些客户端(例如 Java 程序)中简单地处理您的内容,如果这对您来说更容易的话。
| 归档时间: |
|
| 查看次数: |
2266 次 |
| 最近记录: |