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

Sequenze Oracle equivalenti in MySQL

Sono stato in grado di risolvere questo problema semplicemente combinando i suggerimenti di @Akina e @RickJames, grazie a entrambi per il loro supporto.

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

Qui ENGINE=InnoDB è molto importante. Per assicurarmi che ci sia un blocco a livello di tabella durante la lettura, ho modificato il codice dell'app in:

Auto-Commit=FALSE

Allora,

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

Questo stava generando il sequence number univoco anche in caso di più sessioni simultanee.

Ho affrontato un altro problema, che questa soluzione ha rallentato altri sono i punti in cui genero la sequenza#. L'ho risolto abilitando un blocco a livello di riga invece del blocco a livello di tabella indicizzando customer_id.

ALTER TABLE TABLE_NAME ADD INDEX (customer_id);

Spero che questo possa essere di aiuto completo per gli altri.