MySQLトランザクションとアプリケーションの概要

4403 ワード

トランザクションは、人員管理システムなど、さまざまな管理システムに広く応用されています.多くの同期データベース操作では、トランザクションが必要になります.たとえば、人員管理システムでは、人員を削除する必要があります.人員の基本資料を削除する必要があります.また、ポスト、文章などの人員に関する情報を削除する必要があります.これにより、これらのデータベース操作文はトランザクションを構成します.削除されたSQL文delete from userinfo where~~delete from mail where~~delete from article where~~~~トランザクションがなければ、削除中にエラーが発生し、最初の文だけが実行されたと仮定すると、その結果は想像できません!しかし、トランザクションで処理します.削除エラーが発生した場合、rollbackだけで削除操作を取り消すことができます(実際にはcommitがなければ削除操作を確実に実行していません)一般的に、ビジネスレベルのアプリケーションでは、トランザクションを考慮する必要があります!inodb情報の表示shell>/usr/local/mysql-u root-pmysql>show variables like「have_%」システムでは、+------------------------------------------+|Variable_name     | Value |+------------------+-------+| have_bdb   | YES    || have_crypt | YES    || have_innodb| YES    || have_isam  | YES    || have_raid  | YES    || have_symlink      | YES    || have_openssl      | NO     || have_query_Cache|YES|+---------------------+++++8 rows in set(0.05 sec)そうであれば、トランザクションをサポートするテーブルを作成してみましょう.MYSQLのトランザクション機能!MYSQLはトランザクションがサポートされていないと思っていたので、複数のデータテーブルのデータを処理するのが面倒でした(テキストファイルに書き込まなければならず、システムが再ロードされたときにデータベースに書き込まれてエラーを防ぐ)~今日、MYSQLデータベースが4.1からトランザクション機能をサポートしていることに気づき、5.0がストレージプロセスに導入されるそうです^^;まず事務を簡単に紹介しましょう.トランザクションはDBMSの実行単位です.限られたデータベース操作シーケンスから構成されています.ただし、任意のデータベース・オペレーション・シーケンスがトランザクションになるわけではありません.一般的に、トランザクションは4つの条件(ACID)原子性(Autmic):トランザクションは実行性であり、「やらないか、全部やる!」つまり、トランザクション部分の実行は許可されません.障害によってトランザクションが完了しなくても、rollback時にデータベースへの影響を排除します.コンシステンシ(Consistency):トランザクション操作は、データベースを1つのコンシステンシ状態から別のコンシステンシ状態に変換する必要があります.ネットショッピングについて言えば、商品を出庫させ、商品を顧客のショッピングバスケットに入れてこそ事務を構成することができます.独立性(Isolation):複数のトランザクションが同時に実行される場合は、各トランザクションが独立して実行されるようにします.永続性(Durability):正常に実行されたトランザクションは、データベースに永続的な役割を果たします.データベースがエラーを起こしても、リカバリできるはずです.MYSQLのトランザクションには主に2つの方法があります.1、begin、rollback、commitでbeginが1つのトランザクションrollbackトランザクションロールバックcommitトランザクション確認2を実現し、直接setでmysqlの自動コミットモードを変更するMYSQLのデフォルトは自動コミットで、つまりQUERYをコミットして、それは直接実行します!set autocommit=0でset autocommit=1の自動コミットを禁止することで、トランザクションの処理を実現できます.しかし、set autocommit=0を使用すると、後ですべてのSQLがトランザクションとして処理され、commitで確認したりrollbackで終了するまで、このトランザクションを終了すると同時に新しいトランザクションが開かれることに注意してください.最初の方法で現在のトランザクションのみを1つのトランザクションとして使用します.個人的には第一の方法をお勧めします!MYSQLではINNODBとBBBタイプのデータテーブルのみがトランザクションをサポートします!他のタイプはサポートされていません!(覚えておけ!)MYSQL5.0 WINXPでテストに合格~mysql>use test;Database changedmysql> CREATE TABLE `dbtest`(-> id int(4)-> ) TYPE=INNODB;Query OK, 0 rows affected, 1 warning (0.05 sec)mysql> select * from dbtest-> ;Empty set (0.01 sec)mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> insert into dbtest value(5);Query OK, 1 row affected (0.00 sec)mysql> insert into dbtest value(6);Query OK, 1 row affected (0.00 sec)mysql> commit;Query OK, 0 rows affected (0.00 sec)mysql> select * from dbtest;+------+| id    |+------+|     5 ||     6 |+------+2 rows in set (0.00 sec)mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> insert into dbtest values(7);Query OK, 1 row affected (0.00 sec)mysql> rollback;Query OK, 0 rows affected (0.00 sec)mysql> select * from dbtest;
+------+| id    |+------+|     5 ||     6 |+------+2 rows in set (0.00 sec)mysql>*******************************************************************************************************************
 
  
function Tran( $sql ) {
$judge = 1;
mysql_query('begin');
foreach ($sql as $v) {
if ( !mysql_query($v) ) {
$judge = 0;
}
}
if ($judge == 0) {
mysql_query('rollback');
return false;
}
elseif ($judge == 1) {
mysql_query('commit');
return true;
}
}

************************************************
 
  
$handler=mysql_connect("localhost","root","");
mysql_select_db("task");
mysql_query("SET AUTOCOMMIT=0");// , MYSQL
mysql_query("BEGIN");//
if(!mysql_query("insert into trans (id) values('2')"))
{
mysql_query("ROOLBACK");//
}
if(!mysql_query("insert into trans (id) values('4')"))
{
mysql_query("ROOLBACK");//
}
mysql_query("COMMIT");//
mysql_close($handler);
?>