INT PRIMARY KEY和INTEGER PRIMARY KEY SQLite之间的区别

 醣荳_448 发布于 2023-02-13 18:56

在 为表定义模式时INT PRIMARY KEY和之间有什么区别 INTEGER PRIMARY KEY吗?当使用int主键时,我得到了生成的sqlite_autoindex 东西 ; 当整数主键,我得到sqlite_sequence表生成.有什么不同?什么副作用可以有第一和第二变种?

2 个回答
  • 更新:SQLite的ROWID列现在是64位整数:

    在SQLite中,类型为INTEGER PRIMARY KEY的列是ROWID的别名(WITHOUT ROWID表除外),它始终是64位有符号整数.

    在SQLite 3文档中对此进行了解释:

    2.0 INTEGER PRIMARY KEY

    SQLite无类型的一个例外是类型为INTEGER PRIMARY KEY的列.(并且必须使用"INTEGER"而不是"INT".类型为INT PRIMARY KEY的列与其他类型一样无类型.)INTEGER PRIMARY KEY列必须包含32位有符号整数.任何插入非整数数据的尝试都将导致错误.

    INTEGER PRIMARY KEY列可用于实现AUTOINCREMENT的等效项.如果您尝试在INTEGER PRIMARY KEY列中插入NULL,则该列实际上将填充一个比表中已有的最大键大的整数.或者,如果最大的键是2147483647,则该列将填充随机整数.无论哪种方式,INTEGER PRIMARY KEY列都将被分配一个唯一的整数.您可以使用sqlite_last_insert_rowid()API函数或在后续SELECT语句中使用last_insert_rowid()SQL函数来检索此整数.

    2023-02-13 18:57 回答
  • 是的,是有区别的:INTEGER在SQLite的特殊情况下,当数据库并没有单独创建一个主键,但重用ROWID列代替.当您使用INT(或在INTEGER内部"映射"的任何其他类型)时,会创建单独的主键.

    这就是为什么你看到为主键sqlite_autoindex创建的原因INT,并且没有为类型创建索引INTEGER:SQLite重用整数主键的内置索引结构,使得不需要自动索引.

    这就是为什么INTEGER主键在存储和性能方面都更经济.

    请参阅此链接了解详情.

    2023-02-13 18:57 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有