我正在使用数字匹配表,从一个向上。但是,我意识到我需要从零开始。无法弄清楚..
CREATE TABLE IF NOT EXISTS util_nums (n integer primary key
autoincrement not null);
insert into util_nums(n) select null from (select 0 as n union select 1
union select 2 union select 3 union select 4 union select 5 union select 6
union select 7 union select 8 union select 9 union select 10) a
cross join
(select 0 as n union select 1 union select 2 union select 3 union select 4
union select 5 union select 6 union select 7 union select 8 union select 9
union select 10) b
cross join (select 0 as n union select 1 union select 2
union select 3 union select 4 union select 5 union select 6 union select 7
union select 8 union select 9 union select 10) c;
答案 0 :(得分:1)
在sql server中,如果你像这样创建你的表
就很容易了CREATE TABLE util_nums (n as int primary key
identity(0,1) not null,anotherfieldtoholdthenulls integer);
identity(0,1)
表示从零开始并递增1 ..
<强>更新强>
在开始插入之前尝试使用UPDATE SQLITE_SEQUENCE SET seq = -1 WHERE name = 'util_nums'
,看看是否允许....
您还应该能够INSERT INTO util_nums VALUES(0)
答案 1 :(得分:0)
您可以使用
暂时禁用自动增量 SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';
但我建议在插入
后将值更新为0答案 2 :(得分:0)
重要的部分似乎是......
If no negative ROWID values are inserted explicitly, then automatically
generated ROWID values will always be greater than zero.
所以?创建表,插入虚拟记录,强制ID为-1,然后插入数据。之后删除虚拟记录,如果需要的话。
(插入一个带-1的值将强制下一个插入的rwo的id为0,假设该表为空。)
答案 3 :(得分:0)
如果你正在使用SQLite,你应该阅读这个http://www.sqlite.org/autoinc.html。这引起了我的注意:
如果表从未有过 包含任何数据,然后ROWID为1 使用。
似乎没有任何方法可以强制自动增量从1以外的其他东西开始。另请注意,它可能会通过跳过数字来产生间隙。
此可能有效但我目前无法进行测试:
添加ID为-1的行。然后删除它。从文档中不清楚当表中只有负ID时会发生什么。
答案 4 :(得分:0)
Sqlite允许您为主键字段插入显式值:
insert into util_nums(n) values (0);
要快速插入更多行,请在此之后尝试此操作..
insert into util_nums default values;
insert into util_nums(n) select null from util_nums a, util_nums b, util_nums c, util_nums d;
insert into util_nums(n) select null from util_nums a, util_nums b, util_nums c, util_nums d;
答案 5 :(得分:0)
SQLite允许您在此处指定值。
只需从笛卡尔积中插入c.n - 1,而不是null,并将其称为一天。