Sqlite,如果我不需要自增,主键重要吗?

标签 sqlite

我只使用主键整数 ID,因为它是“自增功能”。

如果我不需要“自增”怎么办?如果我不关心记录的唯一性,还需要主键吗?

示例:让我们比较一下这个表:

create table if not exists `table1`
(
    name text primary key,
    tel text,
    address text
);

用这个:

create table if not exists `table2`
(
   name text,
   tel text,
   address text
);

table1 应用主键而 table2 不应用。 table2有什么坏事吗?

我不需要记录是唯一的。

最佳答案

SQLite 是一个关系数据库系统。所以这一切都与关系有关。您在键上建立表之间的关系。

可以没有主键的表;表没有必要有主键。但是您几乎总是想要一个主键来显示是什么让记录在该表中独一无二并建立关系。

在您的示例中,拥有两条相同的记录意味着什么?他们指的是同一个人,不是吗?那么你如何计算数据库中有多少名为 Anna 的人?如果你数五个,其中有多少是独一无二的,有多少只是重复的?这样的查询可以正确完成,但由于缺少主键而变得过于复杂。你将如何建立关系,比如一个人驾驶的汽车?您会有一张汽车表,然后如何将它链接到示例中的人员表?

有些情况下您需要一个没有主键的表。这些通常是日志表等。它们很少见。每当您创建没有主键的表时,问问自己为什么会这样。也许你要构建一些困惑的东西 ;-)

关于Sqlite,如果我不需要自增,主键重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22472938/

相关文章:

android - 是否可以将 iOS db 文件用于 Android 项目?

c++ - 是否可以将 QSqlDatabase 与 SQLCipher 一起使用?

sqlite odbc 静默安装

php - PHP变量传递值后始终为空

mysql - 最近从 sqlite 切换到 mysql。需要在c中转换一些代码

javascript - deviceready 5 秒后未触发​​ Cordova

python - 为什么使用 pyodbc 访问大于 511 的字符字段时 count() 返回 0?

Qt:类中的QSqlDatabase对象(如何声明?)

sql - sqlite tune只读表

javascript - NodeJS 和 Knex - 表不会自动创建