Udało mi się rozwiązać ten problem, po prostu łącząc sugestie @Akiny i @RickJames , dziękuję wam obojgu za ich wsparcie.
create table my_seq(
min_value integer,
Max_value integer,
last_value integer,
increment_by tinyint,
customer_id integer)ENGINE = InnoDB;
Tutaj ENGINE=InnoDB
jest bardzo ważne. Aby upewnić się, że podczas czytania występuje blokowanie na poziomie tabeli, zmodyfikowałem kod mojej aplikacji do:
Auto-Commit=FALSE
Następnie
//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;
To generowało unikalny sequence number
nawet w przypadku wielu jednoczesnych sesji.
Spotkałem się z innym problemem, że to rozwiązanie spowolniło, inne są miejsca, w których generuję sekwencję #. Rozwiązałem to, włączając blokadę na poziomie wiersza zamiast blokady na poziomie tabeli, indeksując identyfikator klienta.
ALTER TABLE TABLE_NAME ADD INDEX (customer_id);
Mam nadzieję, że będzie to pełna pomoc dla innych.