MySQLのストレージエンジンとトランザクション特性

MySQLのストレージエンジン

image.png

MySQLのストレージエンジン

  • プラグ可能なコンポーネントとして提供

    プログラム機能が付属しています-MySQLサービスソフトウェア、プロセス・テーブル・プロセッサ

    - 異なるストレージエンジンは、異なる機能とデータストレージを持っています

  • デフォルトのストレージエンジン

    -MySQL 5.0 / 5.1 --->のMyISAM

    -MySQL 5.5 / 5.6 --->のInnoDB

 例:

SHOWエンジンを実行\ Gは、デフォルトのストレージエンジンInnoDBので使用され、(最後のFEDERATED、8つのその他のサポートを除く)9種使用可能な命令のリストは、MySQL 5.6のストレージエンジンを表示することができます

MySQLの>ショーエンジンがG \ 
*************************** 1行を************** ************* 
      エンジン:InnoDBの
     サポート:DEFAULT 
     コメント:トランザクション、行レベルのロック、および外部キーのサポート
トランザクション:YES 
          XA:YES 
  セーブポイント:YES 
********* ****************** 2行*************************** 
      エンジン。 MRG_MYISAM 
     サポート:YES 
     コメント:同じMyISAMテーブルのコレクションの
取引:NO 
          XA:NO 
  セーブポイント:NO 
*************************** 3行*************************** 
      エンジン:MEMORYの
     サポート:YES
     コメント:、ベースのメモリに格納され、一時テーブルのために有用なハッシュ
NO:トランザクション
          XA:NO 
  セーブポイント:NO 
*************************** 4 。行*************************** 
      エンジン:BLACKHOLE 
     サポート:YES 
     コメント:あなたはそれへの書き込みを/ dev / nullストレージエンジン(何が消えます)
トランザクション:NO 
          XA:NO 
  セーブポイント:NO 
*************************** 5行********** ***************** 
      エンジン:MyISAMテーブルの
     サポート:YES 
     コメント:MyISAMストレージエンジンの
取引:NO 
          XA:NO 
  セーブポイント:NO 
************* ************** 6行***************************
      エンジン:CSV 
     のサポート:YES 
     サポート:NO 
     コメント:CSVストレージエンジンの
取引:NO
          XA:NO 
  セーブポイント:NO 
*************************** 7行************** ************* 
      エンジン:ARCHIVE 
     サポート:YES 
     コメント:アーカイブストレージエンジンの
取引:NO 
          XA:NO 
  セーブポイント:NO 
***************** ********** 8行*************************** 
      エンジン:PERFORMANCE_SCHEMA 
     サポート:YES 
     コメント:パフォーマンスのスキーマ
取引:NO 
          XA:NO 
  セーブポイント:NO 
*************************** 9行*********** **************** 
      エンジン:FEDERATED 
     コメント:連合MySQLのストレージエンジンの
取引:NULL 
          XA:NULL 
  セーブポイント:NULL 
セット内の9行(0.00秒)


ストレージエンジンの設定

  • テーブルのストレージエンジンへの変更

      ときテーブルの構成を手動で指定します

          - 指定されていない、デフォルトのストレージエンジン

          -show表名\ Gテーブルを作成します。

MySQLの>  
のMySQL>  
MySQLの>表innotbを作成する(
    - >のID INT(2)
    - >)エンジン= InnoDBは、
クエリOK、0行が影響を受ける(0.01秒)

MySQLの>ショーテーブルinnotbを作成します。
+ -------- + ---------------------------------------- -------------------------------------------------- - + 
| 表| |表を作成します。
+ -------- + ---------------------------------------- -------------------------------------------------- - + 
| innotb | CREATE TABLEの`innotb`(
  ` id`はint(2)DEFAULT NULL 
)ENGINE =のInnoDB DEFAULT CHARSET = latin1の| 
+ -------- + ---------------------------------------- -------------------------------------------------- - +
セット内の1行(0.00秒)
  • デフォルトのストレージエンジンの設定

   設定ファイルを変更しな/etc/my.cnf

   -defaultストレージエンジン=ストレージエンジン名

[mysqldを] 
#の
#は、大手#を削除し、最も重要なデータ用RAMの量に設定
MySQLで#キャッシュ。他の専用サーバーの合計RAMの70%、10%で開始します。
#innodb_buffer_pool_size = 128M 
#非常に重要なデータの整合性のオプションをオンにする有力#を削除します。logging 
バックアップ間のバイナリログに#変更を。
#log_bin 
#サーバを報告するため、主に有用なオプションを設定するための有力#を削除します。
#サーバーのデフォルトは、トランザクションと高速のSELECTのために高速です。
必要に応じて#最適な値を見つけるために、実験をサイズを調整します。
#join_buffer_size = 128M 
#sort_buffer_size = 2M 
#read_rnd_buffer_size = 2M 
DATADIR =の/ var / libに/ mysqlの
ソケット=の/ var / libに/ mysqlの/にmysql.sock 
secure_file_priv =「/ myload」
シンボリックリンクを無効に#が各種のセキュリティを防ぐために推奨されるリスク
シンボリックリンク= 0 
デフォルトのストレージエンジン= MyISAMテーブルの
ログ・エラー=の/ var /ログ/mysqld.log 
PIDファイル=の/ var /実行/ mysqldを/ mysqld.pid
mysqlの>「default_storage_engine」のような変数を表示。
+ ------------------------ + -------- + 
| 変数名| バリュー| 
+ ------------------------ + -------- + 
| default_storage_engine | MyISAMテーブル| 
+ ------------------------ + -------- + 
セットにおける1行(0.00秒)


ストレージエンジンの機能

MyISAMストレージエンジン

  • 主な特長

       - テーブル・レベルのロッキングをサポート

       - 、トランザクションはロールバックされ、外部キーをトランザクションをサポートしていません。

  • ドキュメント関連テーブル

    - テーブル名.FRM

    - テーブル名.MYI

    - 表名.MYD


InnoDBストレージエンジン

  • 主な特長

       - 行レベルのロックをサポート

       - トランザクションのサポートは、トランザクションがロールバックされ、外部キー

  • ドキュメント関連テーブル

    - テーブル名.FRM、テーブル名の.ibd

    -ibdata1

    -ib_logfile0

    -ib_logfile1


MySQLのロック機構

  • ロックの粒度

    - テーブルレベルロック:一度直接テーブル全体にロックされます。

    - 行レベルロック:行のみをロック

    -页级锁:对整个页面(MySQL管理数据的基本存储单位)进行加锁

  • 锁类型

    -读锁(共享锁):支持并发读

    -写锁(互斥锁、排他锁):是独占锁,上锁期间其他线程不能读表或写表

  • 查看当前锁状态

    -检查Table_lock开头的变量,%作通配符

mysql> show status like 'table_lock%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| Table_locks_immediate | 100   |
| Table_locks_waited    | 0     |
+-----------------------+-------+
2 rows in set (0.00 sec)


事务引入

      现实生活中,我们往往经常会进行转账操作,转账操作可以分为两部分来完成,转入和转出。只有这两部分都完成了才可以认为是转账成功。在数据库中,这个过程是使用两条语句来完成的,如果其中任意一条语句出现了异常没有执行,则会导致两个账号的金额不同步,造成错误。

  为了防止上面可能出现的情况,MySQL引入了事务,所谓事务就是针对数据库的一组操作,它可以由一条或者多条SQL语句组成,同一个事务的操作具备同步的特点,如果其中有一条语句不能执行的话,那么所有的语句都不会执行,也就是说,事务中的语句要么都执行,要么都不执行。

       在使用数据库时需要使用事务,必须先开启事务,具体语句如下:

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

     上面语句是用来开启事务,事务开启之后就可以执行SQL语句,SQL语句执行成功之后,需要使用相应语句提交事务,提交事务的语句如下:

  commit;

需要注意的是,在MySQL中直接书写的SQL语句都是自动提交的,而事务中的操作语句需要使用commit语句手动提交,只有事务提交后其中的操作才会生效。

如果不想提交事务,我们还可以使用相关语句取消事务(也称回滚),具体语句如下:

  rollback;

需要注意的是,rollback语句只能针对未提交的事务执行的回滚操作,已经提交的事务是不能回滚的。




事务特性(ACID)

  • Atomic:原子性

    -事务的整个操作是一个整体,不可分割,要么全部成功,要么全部失败。

  • Consistency;一致性

    -事务操作的前后,表中的记录没有变化。

  • Isolation:隔离性

    -事务曹总时相互隔离不受影响的。

  • Durability;持久性

    -数据一旦提交,不可改变,永久改变表数据


例:

mysql> show variables like "autocommit";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> set autocommit=off;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like "autocommit";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit    | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> select * from intab;
Empty set (0.00 sec)

mysql> desc intab;
+-------+------------+------+-----+---------+-------+
| フィールド| タイプ| ヌル| キー| デフォルト| エクストラ| 
+ ------- + ------------ + ------ + ----- + --------- + ----- - + 
| 名前| VARCHAR(4)| YES | | NULL | | 
+ ------- + ------------ + ------ + ----- + --------- + ----- - + 
セット内の1行(0.00秒)

のMySQL> intab値( "ボブ")を挿入します。
クエリOK、影響を受けた1行(0.00秒)

intabからのMySQL> SELECT * FROM。
+ ------ + 
| 名前| 
+ ------ + 
| ボブ| 
+ ------ + 
1行セット内(0.00秒)

のMySQL>ロールバック。
クエリOK、影響を受けた0行(0.00秒)

intabからのmysql> SELECT * FROM。
空集合(0.00秒)









おすすめ

転載: blog.51cto.com/11483827/2415501