thinkphp トランザクション ロールバック処理と元の PHP トランザクション ロールバックの例
Thinkphp トランザクション ロールバック処理と元の PHP トランザクション ロールバックの例
1. プログラムでトランザクションをサポートするには、まず接続されたデータベースとデータ テーブルがトランザクション mysql をサポートする必要があります。例:
データベース InnoDB トランザクションをサポートします。
データ テーブルはトランザクションをサポートします: InnoDB はトランザクションをサポートします
2. フレームワーク thinkphp トランザクションをサポートしますコード
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> testrollback(){</span><span style="color: #800080;">$model1</span> = D('item'<span style="color: #000000;">);</span><span style="color: #800080;">$model2</span> = D('vote'<span style="color: #000000;">);</span><span style="color: #800080;">$model1</span>-><span style="color: #000000;">startTrans();</span><span style="color: #800080;">$res1</span> = <span style="color: #800080;">$model1</span>->where('id = 5')-><span style="color: #000000;">delete();</span><span style="color: #800080;">$res2</span> = <span style="color: #800080;">$model2</span>->where('id = 2')-><span style="color: #000000;">delete();dump(</span><span style="color: #800080;">$res1</span><span style="color: #000000;">);dump(</span><span style="color: #800080;">$res2</span><span style="color: #000000;">);</span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$res1</span> && <span style="color: #800080;">$res2</span><span style="color: #000000;">){</span><span style="color: #800080;">$model1</span>->commit(); <span style="color: #008000;">//</span><span style="color: #008000;">只有$res1 和 $res2 都执行成功是才真正执行上面的数据库操作</span>dump("commit"<span style="color: #000000;">);}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{</span><span style="color: #800080;">$model1</span>->rollback(); <span style="color: #008000;">//</span><span style="color: #008000;"> 条件不满足,回滚</span>dump("rollback"<span style="color: #000000;">);}dump(</span>"over"<span style="color: #000000;">);</span><span style="color: #0000ff;">exit</span><span style="color: #000000;">;}</span>
3. 元の PHP コード トランザクション インスタンス
メソッド 1:データベースとデータ テーブルが両方とも innoDB
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> rollbackoriginal1(){ </span><span style="color: #800080;">$conn</span> = <span style="color: #008080;">mysql_connect</span>('127.0.0.1','summerzi','summerzi') or <span style="color: #0000ff;">die</span>('DB connection failed!'<span style="color: #000000;">); </span><span style="color: #008080;">mysql_select_db</span>('summer',<span style="color: #800080;">$conn</span><span style="color: #000000;">); </span><span style="color: #008080;">mysql_query</span>('set names "GBK"'<span style="color: #000000;">); </span><span style="color: #008080;">mysql_query</span>('BEGIN'<span style="color: #000000;">); </span><span style="color: #800080;">$sql1</span> = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(41,1,233);"<span style="color: #000000;">; </span><span style="color: #800080;">$sql2</span> = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(fdfd,2,235);"<span style="color: #000000;">; </span><span style="color: #800080;">$res1</span> = <span style="color: #008080;">mysql_query</span>(<span style="color: #800080;">$sql1</span><span style="color: #000000;">); </span><span style="color: #800080;">$res2</span> = <span style="color: #008080;">mysql_query</span>(<span style="color: #800080;">$sql2</span><span style="color: #000000;">); dump(</span><span style="color: #800080;">$sql1</span><span style="color: #000000;">); dump(</span><span style="color: #800080;">$sql2</span><span style="color: #000000;">); dump(</span><span style="color: #800080;">$res1</span><span style="color: #000000;">); dump(</span><span style="color: #800080;">$res2</span><span style="color: #000000;">); </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$res1</span> && <span style="color: #800080;">$res2</span><span style="color: #000000;">){ </span><span style="color: #008080;">mysql_query</span>('COMMIT'<span style="color: #000000;">); dump(</span>'commit success!'<span style="color: #000000;">); }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{ </span><span style="color: #008080;">mysql_query</span>('ROLLBACK'<span style="color: #000000;">); dump(</span>'commit failed, rollback!'<span style="color: #000000;">); } </span><span style="color: #008080;">mysql_query</span>('END'<span style="color: #000000;">); }</span>
である場合のみサポートします。方法 2: (注: トランザクションをサポートしていない MyISAM エンジン データベースの場合、テーブル ロック方法はused)
<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> rollbackoriginal2(){ </span><span style="color: #800080;">$conn</span> = <span style="color: #008080;">mysql_connect</span>('127.0.0.1','summerzi','summerzi') or <span style="color: #0000ff;">die</span>('DB connection failed!'<span style="color: #000000;">); </span><span style="color: #008080;">mysql_select_db</span>('summer',<span style="color: #800080;">$conn</span><span style="color: #000000;">); </span><span style="color: #008080;">mysql_query</span>('set names "GBK"'<span style="color: #000000;">); </span><span style="color: #008080;">mysql_query</span>('SET AUTOCOMMIT=0');<span style="color: #008000;">//</span><span style="color: #008000;">//设置mysql不自动提交,需自行用commit语句提交</span> <span style="color: #800080;">$sql1</span> = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(41,1,233);"<span style="color: #000000;">; </span><span style="color: #800080;">$sql2</span> = "INSERT INTO `summer_userdata`(`uid`,`type`,`target_id`) VALUES(44,2,235);"<span style="color: #000000;">; </span><span style="color: #008000;">//</span><span style="color: #008000;">mysql_query("LOCK TABLES `hmbl_userdata` WRITE");//锁定表</span> <span style="color: #800080;">$res1</span> = <span style="color: #008080;">mysql_query</span>(<span style="color: #800080;">$sql1</span><span style="color: #000000;">); </span><span style="color: #800080;">$res2</span> = <span style="color: #008080;">mysql_query</span>(<span style="color: #800080;">$sql2</span><span style="color: #000000;">); dump(</span><span style="color: #800080;">$sql1</span><span style="color: #000000;">); dump(</span><span style="color: #800080;">$sql2</span><span style="color: #000000;">); dump(</span><span style="color: #800080;">$res1</span><span style="color: #000000;">); dump(</span><span style="color: #800080;">$res2</span><span style="color: #000000;">); </span><span style="color: #008000;">//</span><span style="color: #008000;">mysql_query("UNLOCK TABLES");//解除锁定</span> <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$res1</span> && <span style="color: #800080;">$res2</span><span style="color: #000000;">){ </span><span style="color: #008080;">mysql_query</span>('COMMIT'<span style="color: #000000;">); dump(</span>'commit success!'<span style="color: #000000;">); }</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{ </span><span style="color: #008080;">mysql_query</span>('ROLLBACK'<span style="color: #000000;">); dump(</span>'commit failed, rollback!'<span style="color: #000000;">); } </span><span style="color: #008080;">mysql_query</span>("SET AUTOCOMMIT=1"<span style="color: #000000;">); </span><span style="color: #008080;">mysql_query</span>('END'<span style="color: #000000;">); }</span>
php mysql ビジネス内で複数のデータ操作が必要な場合は、トランザクション処理

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

NAVICAT自体はデータベースパスワードを保存せず、暗号化されたパスワードのみを取得できます。解決策:1。パスワードマネージャーを確認します。 2。NAVICATの「パスワードを記憶する」機能を確認します。 3.データベースパスワードをリセットします。 4.データベース管理者に連絡してください。

1.正しいインデックスを使用して、データの量を削減してデータ検索をスピードアップしました。テーブルの列を複数回検索する場合は、その列のインデックスを作成します。あなたまたはあなたのアプリが基準に従って複数の列からのデータが必要な場合、複合インデックス2を作成します2。選択した列のみを避けます。必要な列のすべてを選択すると、より多くのサーバーメモリを使用する場合にのみサーバーが遅くなり、たとえばテーブルにはcreated_atやupdated_atやupdated_atなどの列が含まれます。

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MySQLでテーブルをコピーするには、新しいテーブルの作成、データの挿入、外部キーの設定、インデックスのコピー、トリガー、ストアドプロシージャ、および機能が必要です。特定の手順には、同じ構造を持つ新しいテーブルの作成が含まれます。元のテーブルからデータを新しいテーブルに挿入します。同じ外部キーの制約を設定します(元のテーブルに1つがある場合)。同じインデックスを作成します。同じトリガーを作成します(元のテーブルに1つがある場合)。同じストアドプロシージャまたは関数を作成します(元のテーブルが使用されている場合)。

Passwordが暗号化された形式で保存されているため、MariadbのNavicatはデータベースパスワードを直接表示できません。データベースのセキュリティを確保するには、パスワードをリセットするには3つの方法があります。NAVICATを介してパスワードをリセットし、複雑なパスワードを設定します。構成ファイルを表示します(推奨されていない、高リスク)。システムコマンドラインツールを使用します(推奨されません。コマンドラインツールに習熟する必要があります)。

次のコマンドでmysqlデータベースを表示します。サーバーに接続します:mysql -u username -pパスワードrun showデータベース。すべての既存のデータベースを取得するコマンド[データベース]を選択します。データベース名を使用します。テーブルを表示:表を表示します。テーブル構造を表示:テーブル名を説明してください。データを表示:[テーブル名]から[ *]を選択します。
