Pude resolver este problema simplemente combinando las sugerencias de @Akina y @RickJames, gracias a ambos por su apoyo.
create table my_seq(
min_value integer,
Max_value integer,
last_value integer,
increment_by tinyint,
customer_id integer)ENGINE = InnoDB;
Aquí ENGINE=InnoDB
es muy importante. Para asegurarme de que haya un bloqueo de nivel de tabla durante la lectura, he modificado el código de mi aplicación a:
Auto-Commit=FALSE
Entonces,
//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;
Esto estaba generando el sequence number
único incluso en el caso de varias sesiones simultáneas.
Me he enfrentado a otro problema, que esta solución se ha ralentizado en otros lugares donde genero el número de secuencia. Lo resolví habilitando un bloqueo de nivel de fila en lugar de un bloqueo de nivel de tabla al indexar customer_id.
ALTER TABLE TABLE_NAME ADD INDEX (customer_id);
Espero que esto sea de gran ayuda para otros.