问题很简单:
在SQLite中,如果我选择自动增加类型NUMERIC
的主键,其具有CHECK(LENGTH(ID) == 10)
之类的检查约束,它是否可以正确插入第一个值为0000000001,依此类推?
答案 0 :(得分:2)
不,这不起作用。添加支票并不会神奇地添加一种方法来填充检查以插入数据。
请参阅this SQLFiddle。
答案 1 :(得分: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|a
尝试插入11位数字会导致CHECK约束失败。
insert into foo values (12345678901, 'a');
Error: CHECK constraint failed: 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
答案 2 :(得分:0)
事实上,ID的长度是1,所以它不起作用。