我正在使用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”自动递增,而它不是主键?
答案 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>