Mysql
 sql >> база данни >  >> RDS >> Mysql

Oracle последователности, еквивалентни в MySQL

Успях да разреша този проблем, като просто комбинирах предложенията на @Akina и @RickJames, благодаря и на двамата за подкрепата.

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

Тук ENGINE=InnoDB е много важно. За да се уверя, че има заключване на ниво таблица по време на четене, промених кода на приложението си на:

Auto-Commit=FALSE

След това,

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

Това генерираше уникалния sequence number дори в случай на множество едновременни сесии.

Сблъсках се с друг проблем, че това решение забави други места, където генерирам последователност #. Реших го, като активирах заключване на ниво ред вместо заключване на ниво таблица чрез индексиране на customer_id.

ALTER TABLE TABLE_NAME ADD INDEX (customer_id);

Надяваме се, че това ще бъде пълноценна помощ за другите.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изтегля данни от mysql база данни и да визуализирам с D3.JS?

  2. Как да използвате jQuery SlickGrid с PHP / MySQL (зареждане на сървърни данни и запазване на промените)

  3. MySQL Time Based Trigger

  4. Как да четете MySQL двоични регистрационни файлове (BinLog) с mysqlbinlog

  5. Инструкция SHOW TABLES с множество стойности LIKE