@H_403_4@
我基本上想要使用以下方案将表从
mysql转换为sqlite:
create table items ( id integer auto_increment,version integer default 0,primary key (id,version) );
本质上,每当我向表中插入任何内容时,我希望ID自动递增,VERSION从0开始,但只要VERSION不同,仍允许具有相同ID的多个项目.
我试图用sqlite复制这种行为但是,我似乎无法让表创建工作.看起来你只允许一列作为自动增量,它必须是主键.如果我将ID作为主键,那么我就不能将VERSION用作键的一部分.但是,如果我创建一个多列密钥(ID,VERSION),那么我无法获得自动增量ID.
我在考虑以下解决方案:
表格1:
create table items { id integer primary autoincrement,version integer}
表2:
create table item_version { id integer,version integer,version) }
当我添加一个新项目时,我将其添加到项目并具有ID自动增量.但是,如果我有相同ID的新版本,我将其添加到item_version.基本上,我使用item_version来保存除项目之外的所有内容,以生成唯一的ID.
@H_403_4@解决方法
不幸的是没有这样的功能,它只在MysqL中存在AFAIK.
当我需要类似的东西时,我在插入新行时使用了以下sql:
INSERT INTO items(id,version) SELECT new_id,SELECT COALESCE(MAX(version),0)+1 FROM items WHERE id=new_id)
这对我有用.
您还可以创建一个可以正确更新版本的触发器:
create trigger my_increment after insert on items begin update items set version=(select max(version) from items where id=new.id)+1 where id=new.id and version = 0; end;
现在,每次在表中插入一个新值:
> insert into items(id) values(10); > insert into items(id) values(15); > insert into items(id) values(10); > select * from items; 10|1 15|1 10|2
正如您所看到的,它为新插入的id创建了版本.从1开始.你可以修补用一点点来获得不同的东西.
@H_403_4@ @H_403_4@