Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Trình tự Oracle tương đương trong MySQL

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Option =N trong chuỗi kết nối MySQL ODBC là gì?

  2. mysql - bất kỳ cách nào để giúp tìm kiếm toàn văn bản với một chỉ mục khác?

  3. MediumBlob trong lược đồ cơ sở dữ liệu Laravel

  4. Bộ đếm số lượt xem trong PHP SQL bằng cách sử dụng PDO chuẩn bị ()

  5. Foreach chèn số lượng lớn PHP