Композитный первичный ключ - поле автоинкремента A с индексом B - SQlite [дубликат]

Обратите внимание, что не обязательно использовать локальное репо. Если этот проект делится с другими, тогда у всех остальных будут проблемы и вопросы, если он не работает, и банка не будет доступна даже в вашей системе управления версиями!

Хотя общее репо - это лучший ответ, если вы не можете сделать это по какой-то причине, тогда встраивание банки лучше, чем локальное репо. Локальное содержимое репо может вызвать множество проблем, особенно с течением времени.

4
задан Benjamin 21 June 2014 в 18:04
поделиться

2 ответа

К сожалению, такой функции нет, существует AFAIK только в 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. Вы можете немного поработать с ним, чтобы получить что-то другое.

7
ответ дан Artyom 25 August 2018 в 08:21
поделиться

Не целочисленные первичные ключи автоматически увеличиваются в SQLite?

-3
ответ дан Tobiasopdenbrouw 25 August 2018 в 08:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: