Успях да разреша този проблем, като просто комбинирах предложенията на @Akina и @RickJames, благодаря и на двамата за подкрепата.
create table my_seq(
min_value integer,
Max_value integer,
last_value integer,
increment_by tinyint,
customer_id integer)ENGINE = InnoDB;
Тук ENGINE=InnoDB
е много важно. За да се уверя, че има заключване на ниво таблица по време на четене, промених кода на приложението си на:
Auto-Commit=FALSE
След това,
//very import to begin the transaction
begin;
select last_number from my_seq where customer_id=? FOR UPDATE;
Read the result in App.
update my_seq set last_number=last_number+1 where customer_id=?;
commit;
Това генерираше уникалния sequence number
дори в случай на множество едновременни сесии.
Сблъсках се с друг проблем, че това решение забави други места, където генерирам последователност #. Реших го, като активирах заключване на ниво ред вместо заключване на ниво таблица чрез индексиране на customer_id.
ALTER TABLE TABLE_NAME ADD INDEX (customer_id);
Надяваме се, че това ще бъде пълноценна помощ за другите.