Tôi đã có thể giải quyết vấn đề này bằng cách kết hợp các đề xuất của @Akina và @RickJames, cảm ơn cả hai đã hỗ trợ họ.
create table my_seq(
min_value integer,
Max_value integer,
last_value integer,
increment_by tinyint,
customer_id integer)ENGINE = InnoDB;
Đây ENGINE=InnoDB
rất quan trọng. Để đảm bảo có khóa cấp bảng trong khi đọc, tôi đã sửa đổi mã ứng dụng của mình thành:
Auto-Commit=FALSE
Sau đó,
//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;
Điều này đã tạo ra sequence number
duy nhất ngay cả trong trường hợp có nhiều phiên đồng thời.
Tôi đã phải đối mặt với một vấn đề khác, rằng giải pháp này đã làm chậm giải pháp khác là nơi tôi tạo chuỗi #. Tôi đã giải quyết vấn đề này bằng cách bật khóa cấp hàng thay vì khóa cấp bảng bằng cách lập chỉ mục customer_id.
ALTER TABLE TABLE_NAME ADD INDEX (customer_id);
Hy vọng điều này sẽ giúp ích đầy đủ cho những người khác.