我正在学习一个教程,并遇到了以下代码。 date
在这里是什么意思?我以为sqlite3不支持日期。
create table log_date (
id integer primary key autoincrement,
entry_date date not null
);
答案 0 :(得分:1)
SQLite page cache,但这并不意味着它不允许您在CREATE TABLE
中使用它,然后在下面使用其他数据类型。
DATE
如does not have a DATE
type中所述转换为NUMERIC
。
有一个Affinity Name Examples来确定不正式支持的类型将转换为哪种类型,而DATE
/ DATETIME
都可以计算为NUMERIC
。
答案 1 :(得分:0)
日期是类型关联,由于SQLite的灵活性,它实际上是 NUMERIC 的类型关联(有关如何确定类型关联的信息,请参见下面的链接3.1)。 。
指定的类型相似性实际上可以是任何东西(不是关键字,并且括号中的值有限制)。甚至可以使用 grUmpleStiltskin 的类型相似性(再次转换为 NUMERIC 存储桶)。
但是,由于SQLite的灵活性,任何类型的数据都可以存储在列的任何类型中(除了作为rowid别名的列(您的< strong> id 列,因为它具有INTEGER PRIMARY KEY
),rowid列的别名,或者rowid列本身只能存储一个Integer值(64位带符号))。
您可能希望阅读Datatypes In SQLite Version 3。
一个称为ID的整数,必须为其分配唯一的密钥 并进行更新(也就是说)。
如前所述,因为您具有INTEGER PRIMARY KEY,所以 id 列是通常隐藏的 rowid 列的别名。如果在插入行时未指定任何值,则SQLite将尝试分配唯一的64位整数值。通常,它比现有的最高Rowid大1。
如您所编码的,AUTOINCREMENT引入了一个规则/约束,该规则/约束的值仅高于使用的最高(即使已删除)rowid值。 AUTOINCREMENT仅适用于可以使用rowid列作为别名的列。
但是,SQLite Autoincrement中的第一句话是:-
AUTOINCREMENT关键字强加了额外的CPU,内存,磁盘空间和 磁盘I / O开销,如果没有严格要求,则应避免。它是 通常不需要。