MySQLのストレージエンジン
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秒)