摘要:主要涉及了sqlite等dbms中一些零碎的技巧,比如避免创建重复表,使时间字段默认值为当前时间等。

前言

这篇文章中提到的东西都是些细节上的技巧,可能是太细的缘故,用搜索引擎刻意寻找往往需要耗费很多时间,因此记录一下。由于过于零碎,把每个技巧单独分篇记录不太合适,因此整合为一篇,日后或许会添加更多内容。

正文

避免创建重复的数据表

创建一个同名的数据表会导致报错,一个可能的处理方式是将数据表创造语句包裹在try...except...中,或者在创建数据表之前先用if判断数据表是否已经存在。
但实上很多DBMS为我们提供了更优雅的解决方案,即IF NOT EXISTS关键词,顾名思义,这个关键词的作用是:当某个数据表不存在时才创建此表。使用示例如下:

CREATE TABLE IF NOT EXISTS DEMO
    (
        id INTEGER PRIMARY KEY 
    )

则只有当DEMO表不存在时,才会创建DEMO表。

使时间字段的默认值为当前时间

这一需求可以通过数据类型TIMESTAMP实现。
TIMESTAMP有两个属性:

  1. 自动初始化:在插入数据时,把时间设为当前时间. (DEFAULT CURRENT_TIMESTAMP)
  2. 自动更新:在修改数据时,把时间设定为当前时间. (ON UPDATE CURRENT_TIMESTAMP)

两种属性互相结合,会产生4种结果:

  1. 自动初始化且自动更新(TIMESTAMP类型的默认行为)
    DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    
  2. 自动初始化,不自动更新
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    
  3. 不自动初始化,自动更新
    ts TIMESTAMP DEFAULT 0 ON UPDATE CURRENT_TIMESTAMP
    
  4. 不自动初始化,不自动更新(此时改用DATETIME类型)