Mysql データ ロールバック エラーの解決策の簡単な分析_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:00:18
オリジナル
977 人が閲覧しました

MYSQL でのトランザクション処理には主に 2 つの方法があります。
1. begin、rollback、commit を使用して実装します
begin はトランザクションを開始します
rollback トランザクションのロールバック
commit トランザクションの確認

2. set を直接使用して、mysql の自動送信モードを変更します
MYSQL はデフォルトで自動的に送信されます。つまり、クエリを送信すると、クエリが直接実行されます。
set autocommit=0 で自動送信を無効にし
set autocommit=1 して自動送信を有効にする
ことでトランザクション処理を実装できます。

set autocommit=0 を使用すると、コミットまたはロールバックで確認するまで、後続のすべての SQL がトランザクションとして処理されます。

この取引を終了すると、新しい取引も開始されることに注意してください。最初の方法によれば、現在のものだけがトランザクションとして使用されます。
個人的には最初の方法を使用することをお勧めします。

トランザクション処理をサポートできるのは、MYSQL の INNODB および BDB タイプのデータ テーブルのみです。他のタイプはサポートされていません。
***: 通常、MYSQL データベースのデフォルトのエンジンは MyISAM です。このエンジンはトランザクションをサポートしません。 MYSQL でトランザクションをサポートしたい場合は、手動で変更できます:

方法は次のとおりです:
1. c:appservmysqlmy.ini ファイルを変更し、skip-InnoDB を見つけて先頭に # を追加して、ファイルを保存します。

2. 操作中に「services.msc」と入力して、mysql サービスを再起動します。

3. phpmyadmin、mysql->show エンジンに移動し (または、mysql->show 変数 ('have_%'; など) を実行)、InnoDB が YES (データベースが InnoDB をサポートしていることを意味します) であることを確認します。
これは、トランザクショントランザクションがサポートされていることを意味します。

4. テーブルを作成するときに、ストレージ エンジンとして InnoDB エンジンを選択できます。以前に作成したテーブルの場合は、mysql->alter table table_name type=InnoDB; または mysql->alter table table_name Engine=InnoDB; を使用して、トランザクションをサポートするようにデータ テーブルのエンジンを変更できます。

/*方法 1*/

コードをコピーします コードは次のとおりです:
/*************** トランザクション--1 ***************/
$conn = mysql_connect('localhost','root',' root') or die ("データ接続エラー!!!");
mysql_select_db('test',$conn);
mysql_query("set names 'GBK'"); //GBK 中国語エンコーディングを使用します;
//開始トランザクション
mysql_query ("BEGIN"); //または mysql_query("START TRANSACTION");
$sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1) ', '0 ')";
$sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0')";//これは私が作りました意図的な間違い
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1){
mysql_query("COMMIT");
echo '送信は成功しました。 ';
}else{
mysql_query("ROLLBACK");
echo 'データのロールバック。 ';
}
mysql_query("END");


/*方法 2*/
コードをコピーします コードは次のとおりです:
/**************** トランザクション--2 *******************/
mysql_query ("SET AUTOCOMMIT=0"); //mysql を自動的に送信しないように設定します。コミット ステートメントを使用して自分で送信する必要があります
$sql = "INSERT INTO `user` (`id`, `username`, `sex`) ) VALUES (NULL, 'test1' , '0')";
$sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0') ";//これは意図的に行いました 間違った書き方
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1){
mysql_query("COMMIT");
echo 「提出は成功しました。 ';
}else{
mysql_query("ROLLBACK");
echo 'データのロールバック。 ';
}
mysql_query("END"); // トランザクションが完了したら、mysql_query("SET AUTOCOMMIT=1") を忘れずに送信してください

http://www.bkjia.com/PHPjc/328082.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/328082.html技術記事 MYSQL のトランザクション処理には主に 2 つの方法があります。 1. begin、rollback、commit を使用して begin を実装し、トランザクションを開始します。 rollback トランザクションのロールバック commit トランザクションの確認を実行します。 2. set を直接使用して、mysql を変更します...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート