问题很简单:在 SQLite 中,如果我选择 AutoIncrement 类型的主键,NUMERIC
它具有类似的检查约束CHECK(LENGTH(ID) == 10)
,它将第一个值插入为 0000000001 等是否可以正常工作?
问问题
258 次
3 回答
2
不,那是行不通的。添加支票并不会神奇地添加一种填充支票以插入数据的方式。
请参阅此 SQLFiddle。
于 2014-10-17T00:54:18.640 回答
1
如果您想像这样限制自动增量列的值,则需要为内部序列表播种。(还有其他方法。)
create table foo (
foo_id integer primary key autoincrement,
other_columns char(1) default 'x',
check (length(foo_id) = 10 )
);
insert into sqlite_sequence values ('foo', 999999999);
允许应用程序代码修改 sqlite_sequence 表、添加新行、删除行或修改现有行。
insert into foo (other_columns) values ('a');
select * from foo;
1000000000|一个
尝试插入 11 位数字会使 CHECK 约束失败。
insert into foo values (12345678901, 'a');
错误:CHECK 约束失败:foo
一种替代方法是在创建表后立即插入具有第一个有效 ID 号的“假”行。然后删除它。
create table foo(...);
insert into foo values (1000000000, 'a');
delete from foo;
现在可以正常插入了。
insert into foo (other_columns) values ('b');
select * from foo;
1000000001|b
于 2014-10-17T04:06:01.387 回答
0
实际上ID的长度是1,所以它不起作用。
于 2014-10-17T03:34:16.900 回答