AutoIncrement是否可以使用Check约束?

时间:2014-10-17 00:06:01

标签: sqlite auto-increment check-constraints check-constraint

问题很简单: 在SQLite中,如果我选择自动增加类型NUMERIC的主键,其具有CHECK(LENGTH(ID) == 10)之类的检查约束,它是否可以正确插入第一个值为0000000001,依此类推?

3 个答案:

答案 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表   添加新行,删除行或修改现有行。

Source

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,所以它不起作用。

相关问题