Mysql
 sql >> Base de données >  >> RDS >> Mysql

Séquences Oracle équivalentes dans MySQL

J'ai pu résoudre ce problème en combinant simplement les suggestions de @Akina et @RickJames, merci à vous deux pour votre soutien.

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

Ici ENGINE=InnoDB est très important.Afin de m'assurer qu'il y a un verrouillage au niveau de la table lors de la lecture, j'ai modifié mon code d'application en :

Auto-Commit=FALSE

Ensuite,

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

Cela générait le sequence number unique même en cas de plusieurs sessions simultanées.

J'ai rencontré un autre problème, que cette solution a ralenti d'autres où je génère la séquence #. Je l'ai résolu en activant un verrou au niveau de la ligne au lieu du verrou au niveau de la table en indexant customer_id.

ALTER TABLE TABLE_NAME ADD INDEX (customer_id);

J'espère que cela sera une aide complète pour les autres.