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

Как получаването на последното вмъкване на mysql ID работи с транзакциите? + въпроси за транзакциите

За да отговоря на първия си въпрос...

Когато използвате транзакции, вашите заявки се изпълняват нормално, що се отнася до връзката ви. Можете да изберете да извършите ангажимент, да запазите тези промени или да върнете обратно, връщайки всички промени. Помислете за следния псевдокод:

insert into number(Random_number) values (rand()); 
select Random_number from number where Number_id=Last_insert_id();

//php

if($num < 1)
   $this->db->query('rollback;'); // This number is too depressing.
else
   $this->db->query('commit;'); // This number is just right.

Генерираното произволно число може да бъде прочетено преди записване, за да се гарантира, че е подходящо, преди да се запази, за да го видят всички (напр. ангажимент и отключване на реда).

Ако PDO драйверът не работи, помислете за използването на драйвера mysqli. Ако това не е опция, винаги можете да използвате заявката 'select last_insert_id() as id;' вместо функцията $this->db->insert_id().

За да отговорите на втория си въпрос, ако вмъквате или актуализирате данни, които други модели ще актуализират или четат, не забравяйте да използвате транзакции. Например, ако колона „Number_remaining“ е зададена на 1, може да възникне следният проблем.

Person A reads 1
Person B reads 1
Person A wins $1000!
Person A updates 1 to be 0
Person B wins $1000!
Person B updates 0 to be 0

Използването на транзакции в същата ситуация би довело до този резултат:

Може да искате да прочетете за нивата на изолация на транзакциите също.

Внимавайте със застой, който може да възникне в този случай:

В крайна сметка, тъй като човек Б вероятно е достигнал max_execution_time на PHP , текущата заявка ще завърши изпълнението си независимо от PHP, но няма да бъдат получени повече заявки. Ако това е транзакция с autocommit=0, заявката ще се върне автоматично, когато връзката с вашия PHP сървър бъде прекъсната.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Защо командите все още не са синхронизирани; не можете да изпълните тази команда сега грешка

  2. недефиниран метод, докато използвате form_for в метода на нов контролер

  3. Продължете да попълвате HTML формуляр след затваряне и повторно отваряне

  4. Качване на голяма mysql база данни на AWS RDS с помощта на замазка - „MySQL сървърът е изчезнал“

  5. Защо този SQL код дава грешка 1066 (Не е уникална таблица/псевдоним:'user')?