在创建表中日期sqlite3

时间:2019-08-09 01:36:43

标签: sql sqlite

我正在学习一个教程,并遇到了以下代码。 date在这里是什么意思?我以为sqlite3不支持日期。

create table log_date (
    id integer primary key autoincrement,
    entry_date date not null
);

2 个答案:

答案 0 :(得分:1)

SQLite page cache,但这并不意味着它不允许您在CREATE TABLE中使用它,然后在下面使用其他数据类型。

DATEdoes 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开销,如果没有严格要求,则应避免。它是   通常不需要。