PHP操作MySQLトランザクションの例
2641 ワード
PHPがMySQLトランザクションを操作する方法を例に挙げ、参考にしてください.具体的な方法は以下の通りです.
一般的に、トランザクションはACIDの特徴を備えなければならない.ACIDとはAtomic(原子性)、Consistent(コンシステンシ)、Isolate(隔離性)、Durable(持続性)の4つの語の頭文字で書かれていますが、以下では「銀行振替」を例にそれぞれの意味を説明します.
①原子性:トランザクションを構成する文は論理ユニットを形成し、その一部のみを実行することはできません.すなわち、トランザクションは分割できない最小ユニットである.たとえば、銀行振替では、ある勘定科目から振替金額を同時に減算し、別の勘定科目に加算する必要があります.1つの勘定科目だけを変更するのは合理的ではありません.②一貫性:トランザクションの実行前後でデータベースは一貫性があります.つまり、トランザクションはシステムステータスを正しく変換する必要があります.たとえば、銀行振替の過程で、振替金額が1つの口座から別の口座に振り込まれるか、2つの口座が変わらず、他の状況はありません.③独立性:ある取引は別の取引に影響しない.つまり、トランザクションが不完全な状態にあるトランザクションを見ることはできません.たとえば、銀行振替中に、振替トランザクションがコミットされないまで、別の振替トランザクションは待機状態になるしかありません.④継続性:トランザクションの効果は永続的に保存されます.逆に言えば、トランザクションは、サーバ、プロセス、通信、メディアの失敗など、すべての失敗に耐えられるはずです.たとえば、銀行振替の過程で、振替後の口座の状態が保存されるようにします.
PHPではmysqliはmysqlトランザクションに関する操作をうまくカプセル化しています.次の例を示します.
ここではphp mysqlシリーズ関数を使用してトランザクションを実行します.
ここで注意してください.
MyISAM:トランザクションはサポートされていません.読み取り専用プログラムでパフォーマンスを向上させるためのInnoDB:ACIDトランザクション、行レベルロック、同時Berkeley DBをサポートする:トランザクションをサポートする
この文書では、PHP+MySQLデータベースのプログラム設計に役立つことを期待しています.
一般的に、トランザクションはACIDの特徴を備えなければならない.ACIDとはAtomic(原子性)、Consistent(コンシステンシ)、Isolate(隔離性)、Durable(持続性)の4つの語の頭文字で書かれていますが、以下では「銀行振替」を例にそれぞれの意味を説明します.
①原子性:トランザクションを構成する文は論理ユニットを形成し、その一部のみを実行することはできません.すなわち、トランザクションは分割できない最小ユニットである.たとえば、銀行振替では、ある勘定科目から振替金額を同時に減算し、別の勘定科目に加算する必要があります.1つの勘定科目だけを変更するのは合理的ではありません.②一貫性:トランザクションの実行前後でデータベースは一貫性があります.つまり、トランザクションはシステムステータスを正しく変換する必要があります.たとえば、銀行振替の過程で、振替金額が1つの口座から別の口座に振り込まれるか、2つの口座が変わらず、他の状況はありません.③独立性:ある取引は別の取引に影響しない.つまり、トランザクションが不完全な状態にあるトランザクションを見ることはできません.たとえば、銀行振替中に、振替トランザクションがコミットされないまで、別の振替トランザクションは待機状態になるしかありません.④継続性:トランザクションの効果は永続的に保存されます.逆に言えば、トランザクションは、サーバ、プロセス、通信、メディアの失敗など、すべての失敗に耐えられるはずです.たとえば、銀行振替の過程で、振替後の口座の状態が保存されるようにします.
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データベースのプログラム設計に役立つことを期待しています.