MySQL先進(6):トランザクションとは、4つのプロパティを使用します

業務

学習目標

  • 4件の取引の特性を知るために、

1.はじめ情勢

ユーザ定義のトランザクションは、SQL文の一連のある操作を実行する、これらの操作は、完全に実行されていない、または完全に実行され、それが作業実行の不可分単位です。

使用トランザクションのシナリオ:

日常の生活の中で、時には我々は、銀行振込を行う必要があり、銀行の転送動作は、これらの突然の停電は、それはこの機能は半分しか完了している原因となります場合は半分に複数のSQL文、SQLの実行を実行する必要性の背後にある、このような状況がありますこの問題を解決するために、許可は、トランザクションによって行われる必要があります。

2.四つの特性総務

  • アトミック(不可分)
  • 一貫性(一貫性)
  • 絶縁(アイソレーション)
  • 永続性(耐久性)

原子性:

トランザクションは、トランザクション全体のすべての操作は、すべて正常に送信、またはすべてのトランザクションのロールバックに失敗のいずれかで、ワークの最小ユニットの一体部分として見なされる必要があり、トランザクションである部分のみを、操作を実行することは不可能ですアトミック

一貫性:

データベースは、常に別の一貫した状態に一貫性のある状態から変換されます。(前の例では、一貫性は、トランザクションが最終的に提出していなかったので、取引が行われ、データベースに保存されません変更するためのシステムは、アカウントになるではない失う$ 200チェック、転写プロセスでクラッシュした場合でも、確保されています。)

アイソレーション:

一般的に言って、トランザクションをコミットする前に作られた会社の営業の変更、他のトランザクションは表示されません。第四文はまだ始まっていない第三の文の完全な実装は、この時間は番組の概要の別のアカウントが実行されているがある場合(前の例では、それは見ての当座預金口座の残高がされていないが200を減算しましたドル。)

持久性:

トランザクションのコミットしたら、それは永続的にデータベースに保存されて作られた変更。

説明:

総務は、ユーザーがより安全に動作することができ、データの整合性と一貫性を確保します。

事務の3.

トランザクションを使用する前に、まずこのタイプは、トランザクションのみを使用することができ、テーブルはInnoDBストレージエンジンのタイプであることを確認し、MySQLのデータベースのストレージエンジンInnoDB内のテーブルには、デフォルトのタイプです。

テーブルストレージエンジン説明:

テーブルストレージエンジンは、データを格納するための機構を提供することで、異なるストレージエンジンのテーブルは、異なるストレージメカニズムを提供します。

車のエンジンのレンダリング:

[失敗投棄外国チェーンの写真は、発信局は、直接アップロード(IMG-M92wW3OY-1584020324744)(IMGS /%E8%A1%A8%E7%9A%84%E5%AD%のダウン画像を保存することが推奨され、セキュリティチェーン機構を有していてもよいです98%E5%を82%A8%E5%BC%95%E6%の93%8E.png)]

説明:

  • 別の車のエンジンは、自動車のパワーが異なっています。

MySQLデータベースのサポートテーブルのストレージエンジンをチェックアウト:

-- 查看MySQL数据库支持的表的存储引擎
show engines;

ここに画像を挿入説明

説明:

  • 共通テーブルはInnoDBテーブルとMyISAMストレージエンジンです
  • InnoDBはトランザクションです
  • MyISAMテーブルがトランザクションをサポートしていない、の利点は、高速のアクセス速度、または選択する必要はありませんトランザクションで、テーブルを作成するために使用することができ、インサートベースのストレージエンジンです

ビューは、テーブルの文財表を作成します。

-- 选择数据库
use jing_dong;
-- 查看goods表
show create table goods;

mysql root@(none):jing_dong> show create table goods;
+-------+--------------------------------------------------------+
| Table | Create Table                                           |
+-------+--------------------------------------------------------+
| goods | CREATE TABLE `goods` (                                 |
|       |   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,       |
|       |   `name` varchar(150) NOT NULL,                        |
|       |   `cate_id` int(10) unsigned NOT NULL,                 |
|       |   `brand_id` int(10) unsigned NOT NULL,                |
|       |   `price` decimal(10,3) NOT NULL DEFAULT '0.000',      |
|       |   `is_show` bit(1) NOT NULL DEFAULT b'1',              |
|       |   `is_saleoff` bit(1) NOT NULL DEFAULT b'0',           |
|       |   PRIMARY KEY (`id`)                                   |
|       | ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 |
+-------+--------------------------------------------------------+

説明:

  • table文を作成することによって学ぶことができ、商品テーブルのストレージエンジンはInnoDBがあります。
  • 修飾されたテーブル格納されているエンジン:ALTERテーブルエンジン=エンジンタイプテーブル。
    • 比如:ALTER TABLEの学生エンジン= 'MyISAMテーブル';

オープントランザクション:

begin;
或者
start transaction;

説明:

  • オープントランザクション実行コマンドは、物理テーブルを維持することなく、変更データがローカルキャッシュファイルに保存され、変更するには

  • 取引のないオープンな表示がない場合は、デフォルト自動コミット(自動コミット)モードを使用してMySQLデータベースは、各SQLステートメントは、実行のために提出されたトランザクションを操作として扱われます

  • コミットとロールバック表示がトランザクションの終了を示すまでときにセット自動コミット= 0は、自動コミットモードの廃止です。

    • = 0、設定された自動コミット・モードを自動コミットを取り消す表し、手動で提出されたトランザクションを完了するために、コミットを実行する必要があります
    set autocommit = 0;
    insert into students(name) values('刘三峰');
    -- 需要执行手动提交,数据才会真正添加到表中, 验证的话需要重新打开一个连接窗口查看表的数据信息,因为是临时关闭自动提交模式
    commit
    
    -- 重新打开一个终端窗口,连接MySQL数据库服务端
    mysql -uroot -p
    
    -- 然后查询数据,如果上个窗口执行了commit,这个窗口才能看到数据
    select * from students;
    

    トランザクションをコミットします。

    データは、更新データを完了するために、物理的なテーブルにローカルキャッシュファイルに提出されます。

    commit;
    

    トランザクションをロールバックします。

    最初に、トランザクションバック前の状態を示す、ローカルキャッシュファイルのキャッシュデータをあきらめます

    rollback;
    

    総務ドリルSQL文:

    begin;
    insert into students(name) values('李白');
    -- 查询数据,此时有新增的数据, 注意: 如果这里后续没有执行提交事务操作,那么数据是没有真正的更新到物理表中
    select * from students;
    -- 只有这里提交事务,才把数据真正插入到物理表中
    commit;
    
    -- 新打开一个终端,重新连接MySQL数据库,查询students表,这时没有显示新增的数据,说明之前的事务没有提交,这就是事务的隔离性
    -- 一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的
    select * from students;
    

4.まとめ

  1. トランザクション特性:
    • 原子性:全体としてのトランザクションで複数の操作を強調
    • 一貫性:強調は矛盾した状態でデータベースに保存されていません
    • アイソレーション:トランザクションデータベースの間で相互に不可視性を強調
    • 永続性:データベースに重点が恒久的にデータを保存することができ提出したら、それは取消不能です
  2. デフォルトの自動コミット(自動コミット)モード使用してMySQLデータベースの変更データ(挿入、更新、削除)操作が自動的にトランザクションのコミットやロールを完了するために、トランザクションをトリガすることを意味し、
  3. オープントランザクショントランザクションを開始するか、起動使用。
  4. ロールバックを使用してトランザクションをロールバックします。
  5. conn.commit()オペレーションの内部pymysqlは、トランザクションをコミットすることです
  6. conn.rollback()オペレーションの内部pymysqlは、トランザクションをロールバックすることです
公開された729元の記事 ウォンの賞賛964 ビュー120 000 +

おすすめ

転載: blog.csdn.net/qq_35456045/article/details/104828816