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

Правилно използване на php mysqli autocommit и rollback

Използвате го, когато имате серия от sql изрази, които трябва да се изпълняват заедно, за да се поддържа последователност във вашата база данни. Мислете за извикването на commit като за установяване на точка за запис в игра. Всеки път, когато извикате rollback, вие отменяте всичко, което е направено до предишния комит.

Представете си ситуация, в която трябва да запазите фактура във вашата таблица с фактури, подробности в таблицата invoice_details и плащания в таблицата за плащания. За да поддържате последователност, трябва да се уверите, че всички те са направени или нито едно от тях не е направено. Ако къде да добавите фактурата и детайлите и след това е имало неуспех при въвеждането на плащането, вашата база данни е оставена в непоследователно състояние.

Обикновено това се постига с помощта на блок try/catch като този:

try {
    $dbconnect->autocommit(false);

    $stmt = $dbconnect->prepare("INSERT INTO `invoices`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val1,$val2);
    $stmt->execute();

    $stmt = $dbconnect->prepare("INSERT INTO `invoice_details`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val3,$val4);
    $stmt->execute();

    $stmt = $dbconnect->prepare("INSERT INTO `payments`(`col1`,`col2`) VALUES (?,?)");
    $stmt->bind_param('ss',$val5,$val6);
    $stmt->execute();

    $dbconnect->commit();
} catch(Exception $e){
    // undo everything that was done in the try block in the case of a failure.
    $dbconnect->rollback();

    // throw another exception to inform the caller that the insert group failed.
    throw new StorageException("I couldn't save the invoice");
}



  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. Ограничение за предотвратяване на нарушаване на FK ограничението в трета таблица

  3. Правилен формат за PDO и MySQL IN/NOT IN заявки

  4. Как мога да получа пълен списък с всички заявки, изпълнявани в момента на моя MySQL сървър?

  5. Създаване на потребител в MySQL