Функция отката PDO beginTransaction - PullRequest
0 голосов
/ 17 апреля 2019

Я новичок в транзакции PDO, я хочу знать, является ли откат () откат базы данных или только таблицы внутри beginTransaction ().

Например:

$db->beginTransaction();
try{
    $stmt = $db->prepare('SELECT * FROM user_detail .......');
    $stmt -> bindParam(........);
    ......
    $stmt -> execute();
    while($s = $stmt->fetch(PDO::FETCH_ASSOC)){
        $update = $db->prepare('UPDATE tableB .......');
        $update -> execute();
        $update = $db->prepare('UPDATE tableC .......');
        $update -> execute();
        $delete = $db->prepare('Delete tableD .......');
        $delete -> execute();

    }
    $db->commit();
}
catch(PDOException $e){
    $db->rollback();
}

В то же время существует другой запрос, который обновит tableC и tableG, отправленные, когда первый запрос (показанный выше) все еще выполняется.Будет ли новый запрос выполняться сразу или после выполнения первого запроса.

Если они оба выполняются одновременно, что если обнаружится ошибка и будет выполнен откат (), будет ли откат второго запроса (update tableC и tableG), если это будет выполнено до начала отката?

1 Ответ

0 голосов
/ 17 апреля 2019

Откат отменяет все изменения, сделанные INSERT / UPDATE / DELETE с начала транзакции.

Независимо от того, выполняете ли вы фиксацию или откат, только те изменения, которые были внесены в текущую транзакцию, а не другие изменения, происходящие в других сеансах.Они могут выполнять фиксацию или откат независимо друг от друга.

Параллельные обновления, запущенные в разных сеансах, будут выполняться одновременно, если только они не попытаются обновить одни и те же строки (даже частично перекрывающиеся наборы строк).Одна или другая сессия сначала доберется до этих строк и заблокирует строки, прежде чем обновит их.Сеанс, который получил блокировки, будет удерживать эти блокировки до тех пор, пока он не выполнит или не откатит свою транзакцию.

Существует еще много информации о блокировке.Это очень сложный предмет.Для начала вам может понравиться моя презентация Блокировка InnoDB с помощью фигурок (но она только царапает поверхность).

Моя презентация специально о MySQL.Вы не сказали, какую марку СУБД вы используете.У всех разных брендов будут свои особенности в отношении транзакций и блокировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...