加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

database – sqlite:具有自动增量列的多列主键

发布时间:2020-12-12 18:57:01 所属栏目:百科 来源:网络整理
导读:我基本上想要使用以下方案将表从 mysql转换为sqlite: create table items (id integer auto_increment,version integer default 0,primary key (id,version)); 本质上,每当我向表中插入任何内容时,我希望ID自动递增,VERSION从0开始,但只要VERSION不同,仍允
我基本上想要使用以下方案将表从 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.

解决方法

不幸的是没有这样的功能,它只在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开始.你可以修补用一点点来获得不同的东西.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读