Вы должны использовать триггерные функции для этой задачи, потому что в таблице возможен только один ключ автоинкремента
Если вы используете postgres, вы можете использовать
create or replace function increment_version() returns trigger as $$
declare
new_version integer;
begin
select max(version) into new_version from YOU_TABLE_NAME where CONDITIONS_YOU_NEED;
new.version = new_version + 1;
return new;
create trigger increment_version after insert on YOUR_TABLE_NAME
for each row execute increment_version();
Также вы можете использовать правила длязавершить эту задачу
create rule increment_version as on insert to YOUR_TABLE
do update YOUR_TABLE set version=versino+1 where id = new.id;
Но учтите, что в случае ошибки триггер выдаст вам исключение, а правило - не
правила в pg https://www.postgresql.org/docs/8.2/static/rules-update.html триггеры в pg https://www.postgresql.org/docs/9.6/static/plpgsql-trigger.html
Если вы используете mysql, вы также можете использовать триггеры, но синтаксис немного отличается https://dev.mysql.com/doc/refman/5.5/en/trigger-syntax.html
create trigger version after insert on YOUR_TABLE for each row begin
begin
select max(version) into new_version from YOU_TABLE_NAME where CONDITIONS_YOU_NEED;
set new.version = new_version;
end;