sql >> Database teknologi >  >> RDS >> Mysql

Oracle-sekvenser svarende til i MySQL

Jeg var i stand til at løse dette problem ved blot at kombinere forslag fra @Akina og @RickJames , tak for jeres støtte begge to.

create table my_seq(
min_value integer,
Max_value integer,
last_value integer,
increment_by tinyint,
customer_id integer)ENGINE = InnoDB;

Her ENGINE=InnoDB er meget vigtigt. For at sikre, at der er låst bordniveau under læsning, har jeg ændret min app-kode til:

Auto-Commit=FALSE

Så,

//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;

Dette genererede det unikke sequence number selv i tilfælde af flere samtidige sessioner.

Jeg har stået over for et andet problem, at denne løsning har bremset andre steder, hvor jeg genererer sekvens#. Jeg har løst det ved at aktivere en rækkeniveaulås i stedet for tabelniveaulås ved at indeksere kunde_id.

ALTER TABLE TABLE_NAME ADD INDEX (customer_id);

Håber dette vil være fuld hjælp for andre.




  1. Hvad skete der med NpgsqlCopySerialize og NpgsqlCopyIn

  2. SQL Server GUID sorteringsalgoritme. Hvorfor?

  3. Slet rækker med fremmednøgle i PostgreSQL

  4. Streng til joda LocalDate i formatet dd-MMM-åå