SQLite:自动增量和插入或忽略将产生未使用的自动增量键

not*_*-jj 4 sql sqlite

我正在使用Mail带有自动递增 ID 和邮件地址的表。该表用于其他4个表,主要用于保存存储(String只保存一次而不是4次)。我INSERT OR IGNORE习惯于盲目地将邮件地址添加到表中,如果存在则忽略更新。这种方法比检查是否存在SELECT ...INSERT在需要时执行要快得多。

对于每个INSERT OR IGNORE自动增量,无论是忽略还是完成,自动增量 Id 都会增加。我一跑我有大约。500k 数据集继续。所以每次运行后,最后一个自增键都会增加 500k。我知道有 2^63-1 个可能的键,所以很长时间用完它们。

我也试过INSERT OR REPLACE,但这会在每次运行命令时增加数据集的 Id,所以这根本不是解决方案。

有没有办法防止这种自动增量键的增加INSERT OR IGNORE

表邮件示例(替换为伪地址)
    mIdMail   mMail
    "1"       ""
    "7"       "mail1@example.com"
    "15"      "mail2@example.com"
    "17"      "mail3@example.com"
    "19"      "mail4@example.com"
    "23"      "mail5@example.com"
    ...
Run Code Online (Sandbox Code Playgroud) 插入查询(使用 Java Lib:org.apache.commons.dbutils)
    INSERT OR IGNORE 
    INTO MAIL 
    ( mMail  ) 
    VALUES ( ? );
Run Code Online (Sandbox Code Playgroud) 表定义
    CREATE TABLE IF NOT EXISTS MAIL (
       mIdMail          INTEGER PRIMARY KEY AUTOINCREMENT, 
       mMail            CHAR(90) UNIQUE 
    ); 
Run Code Online (Sandbox Code Playgroud)

CL.*_*CL. 6

要获得无间隙的自动递增值,请删除 AUTOINCREMENT 关键字。(是的,即使没有它,你也会得到自动递增的值。)