Понимание транзакций pdo mysql
PHP документация говорит:
Если вы никогда раньше не сталкивались с транзакциями, они предлагают 4 основных функции: атомарность, согласованность, изоляция и долговечность (ACID). С точки зрения непрофессионала, любая работа, выполненная в транзакции, даже если она выполняется поэтапно, гарантированно будет применена к базе данных безопасно и без вмешательства других соединений, когда она будет совершена.
ВОПРОС:
Означает ли это, что у меня может быть два отдельных php-скрипта, выполняющих транзакции одновременно, без вмешательства друг в друга?
РАЗРАБОТАТЬ НА ЧТО Я ЗНАЧУ "СТАЛКИВАЕТСЯ":
Представьте, что у нас есть следующееemployees
Таблица:
__________________________
| id | name | salary |
|------+--------+----------|
| 1 | ana | 10000 |
|------+--------+----------|
Если у меня есть два сценария с одинаковым / одинаковым кодом, и они запускаются в одно и то же время:
script1.php а такжеscript2.php (оба имеют одинаковый код):
$conn->beginTransaction();
$stmt = $conn->prepare("SELECT * FROM employees WHERE name = ?");
$stmt->execute(['ana']);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$salary = $row['salary'];
$salary = $salary + 1000;//increasing salary
$stmt = $conn->prepare("UPDATE employees SET salary = {$salary} WHERE name = ?");
$stmt->execute(['ana']);
$conn->commit();
и предполагая, что последовательность событий следующая:
script1.php выбирает данные
script2.php выбирает данные
script1.php обновляет данные
script2.php обновляет данные
script1.php происходит коммит ()
script2.php происходит коммит ()
Какой будет полученная зарплата Ана в этом случае?
Это будет 11000? И будет ли это означать, что одна транзакция будет перекрывать другую, поскольку информация была получена до того, как произошла какая-либо фиксация?
Это будет 12000? И будет ли это означать, что независимо от порядка обновления и выбора данныхcommit()
Функция заставила это случиться индивидуально?
Пожалуйста, не стесняйтесь подробно излагать, как транзакции и отдельные сценарии могут мешать (или не мешать) друг другу.