Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Sekwencje Oracle równoważne w MySQL

Udało mi się rozwiązać ten problem, po prostu łącząc sugestie @Akiny i @RickJames , dziękuję wam obojgu za ich wsparcie.

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

Tutaj ENGINE=InnoDB jest bardzo ważne. Aby upewnić się, że podczas czytania występuje blokowanie na poziomie tabeli, zmodyfikowałem kod mojej aplikacji do:

Auto-Commit=FALSE

Następnie

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

To generowało unikalny sequence number nawet w przypadku wielu jednoczesnych sesji.

Spotkałem się z innym problemem, że to rozwiązanie spowolniło, inne są miejsca, w których generuję sekwencję #. Rozwiązałem to, włączając blokadę na poziomie wiersza zamiast blokady na poziomie tabeli, indeksując identyfikator klienta.

ALTER TABLE TABLE_NAME ADD INDEX (customer_id);

Mam nadzieję, że będzie to pełna pomoc dla innych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Formularz zostaje wysłany ponownie po odświeżeniu

  2. Przestarzałe rozszerzenie MySQL w PHP 5.5.x

  3. Wyzwalacz w mysql powodujący błąd

  4. Pomoc dotycząca aktualizacji MySQL

  5. Zmień tabelę MySQL, aby dodać komentarze do kolumn