ホームページ  >  記事  >  バックエンド開発  >  PHP操作MySQLトランザクションサンプルコード

PHP操作MySQLトランザクションサンプルコード

怪我咯
怪我咯オリジナル
2017-07-12 15:57:341171ブラウズ

MySQL トランザクションは主に、大規模な操作と複雑さの高いデータを処理するために使用されます。たとえば、人事管理システムでは、個人を削除する場合、その個人の基本情報を削除するとともに、その個人に関連するメールボックスや記事などの情報も削除する必要があります。このようにして、これら データベース操作 ステートメントはビジネスを構成します。

この記事では主に、PHP で MySQL トランザクションを操作する方法を例として詳しく紹介します。必要な方は参考にしてください。 PHP は MySQL トランザクションを操作します。その方法は参考のために皆さんに共有されます。具体的な方法は以下の通りです:

一般的に言えば、トランザクションはACID特性を持つ必要があります。いわゆるACIDとは、Atomic(原子性)、Consistent(一貫性)、Isolated(分離)、Durable(永続性)の4つの単語の頭文字をとって書かれており、その意味を「銀行振込」を例に説明していきます。 :

① アトミック性: トランザクションを構成するステートメントは論理的な単位を形成し、その一部のみを実行することはできません。つまり、トランザクションは分割できない最小単位です。例: 銀行振込処理中に、ある口座から振込金額を差し引いて、同時に別の口座に追加する必要があります。1 つの口座だけを変更するのは不合理です。

② 整合性: トランザクション処理の実行前後でデータベースの整合性が保たれています。つまり、トランザクションはシステム状態を正しく変換する必要があります。例: 銀行振込プロセス中に、振込金額が 1 つの口座から別の口座に送金されるか、両方の口座が変更されず、それ以外の状況は発生しません。

③ 分離: あるトランザクションは別のトランザクションに影響を与えません。つまり、どのトランザクションでもトランザクションが不完全な状態にあることを確認することは不可能です。たとえば、銀行送金中、送金トランザクションが送信されるまでは、別の送金トランザクションは待機状態になることしかできません。
④ 耐久性: トランザクション処理の効果を永続的に保存できます。一方、トランザクションは、サーバー、プロセス、通信、メディアの障害など、あらゆる障害に耐えられる必要があります。例: 銀行振込処理中、振込後の口座ステータスを保存する必要があります。

PHP では、mysqli は mysql トランザクションの関連操作を適切にカプセル化しました。次の例:


コードは次のとおりです:

$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";
$sql2 = "update ScoreDetail  set FScore = 300 where ID= '123456'";
$sql3 = "insert into  ScoreDetail ID,Score) values ('123456',60)";
$mysqli = new mysqli('localhost','root','','DB_Lib2Test');
$mysqli->autocommit(false);//开始事物
$mysqli->query($sql1);
$mysqli->query($sql2);
if(!$mysqli->errno){
  $mysqli->commit();
  echo 'ok';
}else{
 echo 'err';
  $mysqli->rollback();
}

ここでは、トランザクションを実行するために php mysql シリーズの

関数

を使用します。
コードは次のとおりです:

$sql1 = "update User set ScoreCount = ScoreCount +10 where ID= '123456'";
$sql2 = "update ScoreDetail  set FScore = 300 where ID= '123456'";
$sql3 = "insert into  ScoreDetail ID,Score) values ('123456',60)";
$conn = mysql_connect('localhost','root','');
mysql_select_db('DB_Lib2Test');
mysql_query('start transaction');
//mysql_query('SET autocommit=0');
mysql_query($sql1);
mysql_query($sql2);
if(mysql_errno ()){
    mysql_query('rollback');
    echo 'err';
}else{
    mysql_query('commit');
    echo 'ok';
}
// mysql_query('SET autocommit=1');
// mysql_query($sql3);

ここで注意してください:

MyISAM: トランザクションをサポートせず、パフォーマンスを向上させるために読み取り専用プログラムに使用されます

InnoDB: ACID トランザクション、行レベルのロック、同時実行をサポートします Berkeley DB : 取引をサポートします

以上がPHP操作MySQLトランザクションサンプルコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。