gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:19:39 24 4
gpt4 key购买 nike

我基本上想使用以下方案将表从 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,
primary key (id, version)
}

当我添加一个新项目时,我将其添加到项目中并具有 ID 自动递增。但是,如果我有相同 id 的新版本,我会将其添加到 item_version。基本上,我使用 item_version 来保存除项目之外的所有内容,以生成唯一的 id。

最佳答案

不幸的是,没有这样的功能,据我所知,它仅存在于 MySQL 中。

当我需要类似的东西时,我只需在插入新行时使用以下 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 开始。你可以修补稍微用它来得到不同的东西。

关于database - sqlite:具有自动增量列的多列主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47680913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com