You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite表中存储时间应使用何种数据类型?建表语句咨询

SQLite时间字段作为自增主键的正确实现方案

首先明确两个关键的SQLite特性:

  • SQLite 不支持 auto_increment 关键字,实现自增主键的标准写法是 INTEGER PRIMARY KEY AUTOINCREMENT
  • 没有原生的时间类型,DATETIME 本质是文本/整数/实数的别名,无法直接作为自增主键

针对你的需求,提供两种可行方案:

方案一:用毫秒级时间戳作为自增主键

适合需要让主键同时承载时间信息的场景,通过插入当前毫秒级时间戳保证主键唯一(同一毫秒内插入多条会冲突,需根据业务场景评估风险)。

建表语句:

cur.execute('CREATE TABLE IF NOT EXISTS settime (time INTEGER PRIMARY KEY, hints VARCHAR(50))')

插入数据时,生成当前毫秒级时间戳作为time字段值:

import datetime
current_ms = int(datetime.datetime.now().timestamp() * 1000)
cur.execute('INSERT INTO settime (time, hints) VALUES (?, ?)', (current_ms, '你的提示信息'))

如果要强制主键严格递增(即使时间戳重复也自动分配唯一值),可以改为:

cur.execute('CREATE TABLE IF NOT EXISTS settime (time INTEGER PRIMARY KEY AUTOINCREMENT, hints VARCHAR(50))')

注意:这种情况下time字段的值会脱离实际时间,仅作为自增ID使用,失去时间字段的意义,需谨慎选择。

方案二:分离自增主键与时间字段(推荐)

更稳妥的做法是单独设置自增主键,再新增一个时间字段存储实际时间,避免时间戳冲突的问题,同时满足两种需求:

建表语句:

cur.execute('CREATE TABLE IF NOT EXISTS settime (id INTEGER PRIMARY KEY AUTOINCREMENT, create_time DATETIME DEFAULT CURRENT_TIMESTAMP, hints VARCHAR(50))')

这里create_time会自动默认插入当前时间,无需手动赋值;id作为自增主键保证唯一性。

内容的提问来源于stack exchange,提问作者Xaimekss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 19:49:54