如何使非主键列自动递增

时间:2015-08-14 07:47:25

标签: java sqlite jdbc

我正在使用sqlite和java JDBC,我创建了下表:

private final String sqlTableNode = "CREATE TABLE "+this.TABLE_NODE+
        " ( "+this.NODE_TABLE_ID_COL+" INTEGER, " +
        this.NODE_TABLE_NODE_ID_COL+" TEXT NOT NULL, " +
        this.NODE_TABLE_LAT_COL+" TEXT NOT NULL, " +
        this.NODE_TABLE_LNG_COL+" TEXT NOT NULL, " +
        "PRIMARY KEY ("+this.NODE_TABLE_LAT_COL+", "+this.NODE_TABLE_LNG_COL+") );";

我的问题是,如何让第一列“this.NODE_TABLE_PK_COL”自动递增,而它不是主键?

3 个答案:

答案 0 :(得分:4)

不幸的是,这是不可能的。 SQLite documentation on Autoincrement在页面底部显示:

  

由于AUTOINCREMENT关键字更改了ROWID选择算法的行为,因此不允许在WITHOUT ROWID表或INTEGER PRIMARY KEY以外的任何表列上使用AUTOINCREMENT。任何在WITHOUT ROWID表或INTEGER PRIMARY KEY列以外的列上使用AUTOINCREMENT的尝试都会导致错误。

答案 1 :(得分:3)

正如documentation所示,自动增量仅适用于主键。

答案 2 :(得分:1)

@rmaik: 不,你不能。您可以在此处找到文档:https://www.sqlite.org/autoinc.html

它明确指出:

  

WITHOUT ROWID表或INTEGER PRIMARY KEY以外的任何表列上不允许使用AUTOINCREMENT。任何在WITHOUT ROWID表或INTEGER PRIMARY KEY列以外的列上使用AUTOINCREMENT的尝试都会导致错误。

如果我了解您的要求,您可以在此方案中执行的操作是,在

上创建主键
  

this.NODE_TABLE_ID_COL。

因为它是整数,所以它符合主键的标准。

并创建唯一键:

  

UNIQUE KEY(&#34; + this.NODE_TABLE_ID_COL +&#34;,&#34; + this.NODE_TABLE_LAT_COL +&#34;,&#34; + this.NODE_TABLE_LNG_COL +&#34;))< / p>