MySQLのインデックス作成とトランザクション、ビュー、ストアドとlnnoDBエンジンのMylSAM
インデックスの概念
カタログでのデータベースのインデックス作成と同様の本:
1.-本一冊の本を読むことなく、すばやく目的の情報を見つけるためにディレクトリを使用することができ
、本の2.内容は、各単語のページ番号を示す単語のリストであり、
データベースのインデックス:
データベース、インデックスの弓1. |手順は、所望のデータを見つけることができ、テーブル全体、スキャンせずにデータベースを作成する
テーブルである-列のコレクション、または列の複数の値を、|ケーブル2に弓のデータベースをこれらの物理的な値を識別するために、論理データ・ページ・ポインタリスト
インデックスの役割:
1.適切な指標が提供された後、様々な測位技術を用いた高速データベースは、大幅にクエリの速度加速することができる
ときに大きなテーブル、特に2を、または複数のテーブルを含むクエリは、インデックスクエリはドライに加速することができ倍
3. IOデータベースのコストを削減することができ、また、インデックスデータベースソートのコスト低減することができる
データシート一意性を保証するために一意のインデックスを作成することにより、4
5は、テーブルとテーブルの間の接続促進することができる
パケットの6用途およびソートする際、グループ化と大幅に時間を短縮することができますソート
カテゴリーインデックス
通常のインデックス:
タイプ、それだけではない - などの制限|最も基本的な指標であり、
ユニークインデックス:
このケーブルの弓|と前回の「一般的な指標は、」基本的には同じですが、1つの違いで:索引付きの列のすべての値は、一度だけ発生する可能性があり、それが一意である必要があります
主キー:
主キーは一意のインデックスであるが、それは「PRIMARY KEY」として指定する必要があります
フルテキストインデックス:
フルテキストインデックスおよびフルテキスト検索をサポートするために、最初からMySQLバージョン3.23.23。、フルテキストインデックスは、フルテキストインデックスにMySQLのFULLTEXTインデックス型としてVARCHAR型やTEXTカラム上で作成することができます
単一のインデックスとマルチカラムインデックス:
インデックスは、別のインデックスに作成することができ、インデックスが複数の列に作成することができます
の原則に基づいてインデックスを作成します
1.テーブルの主キーを、外部キーインデックスが存在しなければならない
データ量がライン300はテーブルインデックス有するべき超える2.
頻繁に接続フィールドに、他のテーブルに接続された3表に索引付けされるべきである
。4.一意乏しいフィールドインデックスを作成するのに適していない
フィールドは、インデックス6を作成するために、あまりにも頻繁に更新されていないことが多い、特に大きなテーブルのフィールドには、Where句のフィールドに表示されます5.インデックスを作成する必要があります
インデックスは選択性の高いフィールド上に構築されなければならない7。
8インデックスが大きくても、テキストフィールドの長フィールドのためではなく、ビルドインデックスに、小さなフィールド上に構築されなければなりません
コンセプト総務
1.トランザクション機構で、操作のシーケンスは、データベース操作のセットを含むコマンドおよびすべてのコマンドのような- -フル-システム又はアンドゥ操作要求に提出の日付、すなわち、いずれかのデータベースコマンドのセットが実行され、または実行していない
データベース・システム上で同時操作を実行しながら、作業の論理単位2.不可分取引をされ、トランザクションは、最小の制御部であり
、銀行、保険会社など3.マルチユーザ操作システムデータベースのシーン、有価証券は、その他のシステムを取引
データの整合性を確保するために、トランザクションの整合性4.採用
ACIDトランザクション機能
アトミック(原子性):
1. Aのトランザクションが完了操作で、トランザクションの各要素は不可分(原子)であり、
トランザクションがコミットまたは全体的にロールバックされなければならないすべての要素2
のトランザクションの任意の要素に障害が発生した場合、トランザクション全体が失敗3
一貫性(一貫性):
トランザクションが完了すると、データが一貫した状態になければならない:トランザクションの開始前に、データ
リポジトリに格納されたデータの一貫した状態にあり、進行中のトランザクションで、データであってもよい
矛盾した状態で、トランザクションが正常に終了すると、データは再びなければなりません既知の
一貫性の状態
絶縁(アイソレーション):
1.すべての同時トランザクションデータは、トランザクションが独立していなければならないことを示し、互いに分離され、それがどのような方法で影響を与えたり、その他の事項に依存してはならない変更
2.トランザクションデータが別のトランザクションで同じデータを変更するために使用することができますアクセストランザクションの終了後のデータは、作業を開始する前に、データへのアクセス、または別の同じデータを使用します
永続性(耐久性):
かかわらず、システムが故障、トランザクションの結果であるかどうかの永久的なもの1.トランザクション耐久手段
トランザクションがコミットされると2は、トランザクションの効果は永続的にデータベースに保持されます
そのサービスの運用
トランザクションに提出したSQL文が自動的に提出されるとき1.デフォルトのMySQLのトランザクションが自動的にケースに提出されました
この方法の事務の2手動制御:
①Transactionコマンド制御
②利用セットのトランザクションモードの設定
3.トランザクションコマンド制御トランザクション:
①begin:トランザクション開始
②commitを:トランザクションコミット
②rollbackを:トランザクションをロールバック
4.設定された制御コマンド:
①set自動コミット= 0:無効に自動送信
②set自動コミット= 1:有効自動コミット
ストレージエンジンの概念
ファイルに格納された異なる技術の様々な1.MySQLデータは、各技術は、異なるストレージメカニズム、索引付け技術、ロックレベルを使用し、最終的に異なる機能とこれらの異なる技術の能力および支持機能を提供しますMySQLで呼ばれるストレージエンジン
2. MySQLストレージエンジンは、ファイルシステム記憶装置または記憶フォーマットデータ格納部にある
3 MySQLの現在、2つの一般的に使用されるストレージエンジン。
(読書用)①MyISAM
(書き込み用)②InnoDB
データベースの実際のデータI / O操作を実行する責任4.MySQLストレージエンジンMySQLデータベースサーバコンポーネント
5.特別なストレージエンジンを使用することの主要な利点の1つは、アプリケーションの唯一の所望の特定の特性、データベースシステムオーバーヘッドも小さく、より強力で、より高いパフォーマンスデータベースを提供することです
6.MySQLシステムは、エンジンのファイルシステムに格納されている。エンジンに保存し、それぞれのストレージエンジンに応じて、記憶するための記憶形式の後に、データファイル内のデータの前にメモリに転送されます
MyISAMの紹介
1.MyISAMストレージエンジンは、ISAMの前身、デフォルトのストレージエンジンのバージョン5.5の前にMySQリレーショナルデータベースシステムです
2.ISAMが明確に定義された時の試練を経たデータ管理テーブルには、ときに考慮にデータベースクエリの数が更新さよりもはるかに大きい回数取るように設計
の機能の3.SAMを:
①ISAM速度は操作が、迅速に実行されて読ん
②それがトランザクション処理をサポートしていない
③とメモリおよびストレージリソースの多くを取ることはありません
トレラントを障害することはできません④
適したMyISAM生産シナリオの例:
1をサポートするビジネス取引に必要はありません
2.一般的な一方的に一方的以上の書き込みデータトラフィック、より多くのデータサービスを読ん
3.MyISAMストレージエンジンのシーンデータが読み書き頻繁には適していない
4.読みます比較的低いトラフィックへの同時書き込みアクセス
5.比較的小さいトラフィックデータ修正
6.データサービス- -一貫性の要件が非常に高いトラフィックではありません
、サーバーの7.比較的貧弱なハードウェアリソース
InnoDBの機能が導入されました
1.サポートサービス:サポート4つのトランザクション分離レベル
2行レベルのロックが、それでも全表スキャンテーブルレベルロックになります
トランザクション分離レベルに関連付けられたブロック3.書き込み
4.非常に効率的なキャッシュ機能を持っている:、インデックスをキャッシュすることができますデータをキャッシュすることができ
、クラスタに保存されている5。テーブルの主キー
6. Oracleデータベースに似サポートパーティション、テーブルスペース、
7サポート外部キー制約を、5.5の前にフルテキストインデックスをサポートしていない、バージョン5.5をサポートフルテキストインデックス後で
8.ハードウェアリソース要件まだ比較的高い場面
InnoDBの適用生産シーン解析
支援事業の取引に1.必要性
2.行レベルロックは、クエリがインデックスによって行われていることを確認するための良い高並行処理に適応する能力が、必要がある
フォーラム、マイクロブログ、その他:3オペレーショナルデータの更新より頻繁にのようなシナリオ、
4。銀行:それはのような、業務データの高い整合性が必要です
5.ハードウェアより大きなメモリ、より良い使用InnoDBはメモリの使用率を改善するための能力をキャッシュ、ディスクIOの圧力を下げます
構成ストレージエンジン
1.企業内で適切なストレージエンジンを選択した後、あなたは変更することができます
。2.変更にの手順を:
参照①構成可能なデータベース・ストレージエンジン
②表示ストレージエンジン使用されている
選択されたタイプのために構成③ストレージエンジン
3.ショーエンジンがサポートされているストレージエンジンはテーブルのストレージエンジンを使用する参照システムを表示します
方法1:ライブラリー名名=「名前から番組表の状態;
方法2:ショーは、テーブル表を作成します
インデックス実用的な操作
1、データベースへのアクセス、データベースを作成し、テーブルを作成
[root@master2 ~]# mysql -uroot -p ##进入数据库
Enter password: ##输入密码
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database school; ##创建数据库school
Query OK, 1 row affected (0.00 sec)
mysql> use school; ##使用数据库
Database changed
mysql> create table info( ##创建表
-> id int(4) not null primary key auto_increment, ##设置主键,自动增加
-> name varchar(10) not null, ##名字类型varchar不为空
-> address varchar(50) default 'nanjing', ##默认南京
-> age int(3) not null);
Query OK, 0 rows affected (0.02 sec)
テーブルに2、挿入データ
mysql> insert into info (name,address,age) values ('zhangsan','beijing',20),('lisi','shanghai',22);
##插入数据
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from info; ##查看表内容
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
+----+----------+----------+-----+
2 rows in set (0.00 sec)
mysql> desc info; ##查看表结构
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| address | varchar(50) | YES | | nanjing | |
| age | int(3) | NO | | NULL | |
+---------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
3、直接指数(一般インデックス、一意のインデックス)を作成するには、3つの方法で定義されたテーブルを作成し、変更、作成し使用
mysql> create index index_age on info (age); ##创建普通索引
Query OK, 0 rows affected (0.02 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from info; ##查看表中的索引
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| info | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
| info | 1 | index_age | 1 | age | A | 2 | NULL | NULL | | BTREE | | |
+-------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
mysql> drop index index_age on info; ##删除表中的索引
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from info; ##查看表中的索引
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| info | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.01 sec)
mysql> create unique index unique_name on info (name); ##创建唯一性索引
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from info; ##查看表中索引
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| info | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
| info | 0 | unique_name | 1 | name | A | 2 | NULL | NULL | | BTREE | | |
+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
mysql> drop index unique_name on info; ##删除表中的索引
Query OK, 0 rows affected (0.00 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from info; ##查看表中的索引
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| info | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.00 sec)
mysql> alter table info add unique index index_name (name); ##使用alter插入表索引
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from info; ##查看表中的索引
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| info | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
| info | 0 | index_name | 1 | name | A | 2 | NULL | NULL | | BTREE | | |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
図4に示すように、2つのテーブルを作成し、関連付け、マルチテーブルのクエリ
mysql> create table user( ##创建user表
-> id int(4) not null primary key auto_increment, ##设置主键和自动增加
-> name varchar(10) not null,
-> score decimal not null,
-> hobby int(2) not null default '1', ##默认1
-> index index_score (score)); ##设置索引score
Query OK, 0 rows affected (0.01 sec)
mysql> desc user; ##查看表结构
+-------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+---------------+------+-----+---------+----------------+
| id | int(4) | NO | PRI | NULL | auto_increment |
| name | varchar(10) | NO | | NULL | |
| score | decimal(10,0) | NO | MUL | NULL | |
| hobby | int(2) | NO | | 1 | |
+-------+---------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
mysql> insert into user (name,score,hobby) values ('test01',88,1),('stu01',99,2),('wangwu',77,3);
##向表中插入数据
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from user; ##查看表内容
+----+--------+-------+-------+
| id | name | score | hobby |
+----+--------+-------+-------+
| 1 | test01 | 88 | 1 |
| 2 | stu01 | 99 | 2 |
| 3 | wangwu | 77 | 3 |
+----+--------+-------+-------+
3 rows in set (0.00 sec)
mysql> create table hob( ##创建hob表
-> id int(2) not null primary key,
-> hob_name varchar(10) not null);
Query OK, 0 rows affected (0.00 sec)
mysql> desc hob; ##查看表结构
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| id | int(2) | NO | PRI | NULL | |
| hob_name | varchar(10) | NO | | NULL | |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
mysql> insert into hob (id,hob_name) values (1,'看书'),(2,'运动'),(3,'听歌'); ##插入表数据
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> select * from hob; ##查看表内容
+----+----------+
| id | hob_name |
+----+----------+
| 1 | 看书 |
| 2 | 运动 |
| 3 | 听歌 |
+----+----------+
3 rows in set (0.00 sec)
mysql> select * from user inner join hob on user.hobby=hob.id; ##关联user和hob两张表
+----+--------+-------+-------+----+----------+
| id | name | score | hobby | id | hob_name |
+----+--------+-------+-------+----+----------+
| 1 | test01 | 88 | 1 | 1 | 看书 |
| 2 | stu01 | 99 | 2 | 2 | 运动 |
| 3 | wangwu | 77 | 3 | 3 | 听歌 |
+----+--------+-------+-------+----+----------+
3 rows in set (0.00 sec)
mysql> select user.name,hob.hob_name from user inner join hob on user.hobby=hob.id;
##去除其他内容显示name和hob_name内容
+--------+----------+
| name | hob_name |
+--------+----------+
| test01 | 看书 |
| stu01 | 运动 |
| wangwu | 听歌 |
+--------+----------+
3 rows in set (0.00 sec)
mysql> select u.name,h.hob_name from user u inner join hob h on u.hobby=h.id; ##设置简易名称
+--------+----------+
| name | hob_name |
+--------+----------+
| test01 | 看书 |
| stu01 | 运动 |
| wangwu | 听歌 |
+--------+----------+
3 rows in set (0.00 sec)
mysql> create view view_user as select u.name,h.hob_name from user u inner join hob h on u.hobby
##创建视图
Query OK, 0 rows affected (0.00 sec)
mysql> select * from view_user; ##查看视图
+--------+----------+
| name | hob_name |
+--------+----------+
| test01 | 看书 |
| stu01 | 运动 |
| wangwu | 听歌 |
+--------+----------+
3 rows in set (0.00 sec)
mysql> update user set hobby=3 where name='test01'; ##修改user表中内容
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from view_user; ##查看视图,即视图就是表的一个链接
+--------+----------+
| name | hob_name |
+--------+----------+
| stu01 | 运动 |
| test01 | 听歌 |
| wangwu | 听歌 |
+--------+----------+
3 rows in set (0.00 sec)
5、フルテキストインデックス、複合インデックス
mysql> select * from info; ##查看表内容
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
+----+----------+----------+-----+
2 rows in set (0.00 sec)
mysql> show index from info; ##查看表的索引
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| info | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
| info | 0 | index_name | 1 | name | A | 2 | NULL | NULL | | BTREE | | |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
mysql> create fulltext index full_addr on info (address); ##以address创建全文索引
Query OK, 0 rows affected, 1 warning (0.07 sec)
Records: 0 Duplicates: 0 Warnings: 1
mysql> show index from info; ##查看表索引
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| info | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | |
| info | 0 | index_name | 1 | name | A | 2 | NULL | NULL | | BTREE | | |
| info | 1 | full_addr | 1 | address | NULL | 2 | NULL | NULL | YES | FULLTEXT | | |
+-------+------------+------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)
mysql> select * from user; ##查看user表内容
+----+--------+-------+-------+
| id | name | score | hobby |
+----+--------+-------+-------+
| 1 | test01 | 88 | 3 |
| 2 | stu01 | 99 | 2 |
| 3 | wangwu | 77 | 3 |
+----+--------+-------+-------+
3 rows in set (0.00 sec)
mysql> create index index_name_score on user (name,score); ##创建name和score的组合索引
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show index from user; ##查看表索引
+-------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| user | 0 | PRIMARY | 1 | id | A | 3 | NULL | NULL | | BTREE | | |
| user | 1 | index_score | 1 | score | A | 3 | NULL | NULL | | BTREE | | |
| user | 1 | index_name_score | 1 | name | A | 3 | NULL | NULL | | BTREE | | |
| user | 1 | index_name_score | 2 | score | A | 3 | NULL | NULL | | BTREE | | |
+-------+------------+------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
4 rows in set (0.00 sec)
何か実用的なエクササイズ
図1に示すように、オープンは、データテーブルに挿入します
mysql> select * from info; ##查看表内容数据
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
+----+----------+----------+-----+
2 rows in set (0.00 sec)
mysql> insert into info (name,address,age) values ('wangwu','hangzhou',30); ##插入数据
mysql> begin; ##开启事务
Query OK, 0 rows affected (0.00 sec)
mysql> insert into info (name,address,age) values ('zhaoliu','hangzhou',31); ##插入数据
Query OK, 1 row affected (0.00 sec)
mysql> savepoint a; ##设置保存节点a
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info; ##查看表数据
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 4 | zhaoliu | hangzhou | 31 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
mysql> insert into info (name,address,age) values ('tianqi','hangzhou',32); ##继续插入数据
Query OK, 1 row affected (0.00 sec)
mysql> savepoint b; ##设置保存节点b
Query OK, 0 rows affected (0.00 sec)
mysql> insert into info (name,address,age) values ('heiba','hangzhou',32); ##继续插入数据
Query OK, 1 row affected (0.00 sec)
mysql> select * from info; ##查看表内容
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 4 | zhaoliu | hangzhou | 31 |
| 5 | tianqi | hangzhou | 32 |
| 6 | heiba | hangzhou | 32 |
+----+----------+----------+-----+
6 rows in set (0.00 sec)
図2に示すように、正常に挿入されたかどうかを確認するために別の端末を使用
[root@master2 ~]# mysql -uroot -p ##进入数据库
Enter password: ##输入密码
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> use school; ##使用数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select * from info; ##查看表内容,此时并没有提交
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
+----+----------+----------+-----+
3 rows in set (0.00 sec)
3、ロールバック、保存されたノードを返します
mysql> rollback to b; ##利用回滚到保存节点b
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info; ##查看表数据
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 4 | zhaoliu | hangzhou | 31 |
| 5 | tianqi | hangzhou | 32 |
+----+----------+----------+-----+
5 rows in set (0.00 sec)
mysql> rollback to a; ##回滚到保存节点a
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info; ##查看表数据
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 4 | zhaoliu | hangzhou | 31 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
mysql> rollback; ##回滚到初始,退出事务状态
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info; ##查看表数据
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
+----+----------+----------+-----+
3 rows in set (0.00 sec)
4、トランザクションをコミット
mysql> begin; ##开启事务
Query OK, 0 rows affected (0.00 sec)
mysql> insert into info (name,address,age) values ('heiba','hangzhou',32); ##插入数据
Query OK, 1 row affected (0.00 sec)
mysql> commit; ##提交事务
Query OK, 0 rows affected (0.00 sec)
mysql> select * from info; ##查看表数据
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | heiba | hangzhou | 32 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
図5に示すように、ビューに他の端末の使用
mysql> select * from info; ##查看表数据
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | heiba | hangzhou | 32 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
6、操作の他のトランザクションモード
mysql> set autocommit=0; ##设置不自动提交事务
Query OK, 0 rows affected (0.00 sec)
mysql> update info set address='beijing' where name='heiba'; ##修改表数据
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from info; ##查看表信息
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | heiba | beijing | 32 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
##另一个终端查看
mysql> select * from info; ##查看表信息,并没有修改
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | heiba | hangzhou | 32 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
mysql> set autocommit=1; ##开启自动提交事务
Query OK, 0 rows affected (0.00 sec)
##另一个终端查看
mysql> select * from info; ##查看表数据,此时就已经修改
+----+----------+----------+-----+
| id | name | address | age |
+----+----------+----------+-----+
| 1 | zhangsan | beijing | 20 |
| 2 | lisi | shanghai | 22 |
| 3 | wangwu | hangzhou | 30 |
| 7 | heiba | beijing | 32 |
+----+----------+----------+-----+
4 rows in set (0.00 sec)
そして、InnoDBストレージエンジンMyLSAM
図1は、システムのデフォルトのストレージエンジンを表示します
mysql> show engines; ##查看默认存储引擎innodb
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
mysql> show create table info; ##查看创建的表的存储引擎innodb
| info | CREATE TABLE "info" (
"id" int(4) NOT NULL AUTO_INCREMENT,
"name" varchar(10) NOT NULL,
"address" varchar(50) DEFAULT 'nanjing',
"age" int(3) NOT NULL,
PRIMARY KEY ("id"),
UNIQUE KEY "index_name" ("name"),
FULLTEXT KEY "full_addr" ("address")
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8
2、デフォルトのストレージエンジンを設定、MySQLの設定ファイルを変更します
[root@localhost ~]# vim /etc/my.cnf ##修改配置文件
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysql.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1
default-storage-engine=Myisam ##添加默认存储引擎为Myisam
[root@master2 ~]# systemctl restart mysqld.service ##重启MySQL服务
図3に示すように、データベースに
[root@master2 ~]# mysql -uroot -p ##进入数据库
Enter password: ##输入密码
mysql> use school; ##使用数据库
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table a ( id int ); ##创建一个a表
Query OK, 0 rows affected (0.00 sec)
mysql> show create table a; ##查看表默认的存储引擎Myisam
+-------+-------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------+
| a | CREATE TABLE "a" (
"id" int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> alter table a engine=innodb; ##修改表的存储引擎为innodb
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> show create table a; ##查看表的存储引擎innodb
+-------+-------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-------------------------------------------------------------------------------------+
| a | CREATE TABLE "a" (
"id" int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-------------------------------------------------------------------------------------+
1 row in set (0.00 sec)