- 1. InnoDB
- 2. my.cnfの設定 [mysqld]に「default-storage-engine=InnoDB」を追加
- 3. MySQL、Engine確認
- 4. トランザクションのテスト実行
1. InnoDB
トランザクションを行うにはテーブルをInnoDBにする。
テーブル作成時、デフォルトでInnoDBにするにはconfを編集する必要がある。
※トランザクションを使うテーブルはInnoDBにしておく必要がある。
2. my.cnfの設定
[mysqld]に「default-storage-engine=InnoDB」を追加
2.1. my.cnfを編集する(赤文字の箇所追加)
# touch /root/dum.sh
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
log=/var/log/mysql/mysql_query.log
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-character-set=utf8
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=InnoDB <-- 追加
[client]
default-character-set=utf8
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
2.2. サービス再起動
# service mysqld restart
3. MySQL、Engine確認
3.1. Transactions項目を確認
Transactions項目がYESであればトランザクションが有効である。
# mysql> show engines ;
結果
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+------------+---------+------------------------------------------------------------+--------------+------+------------+
3.2. テーブルのEngineを確認
EngineがInnoDBであればトランザクションが有効である。
mysql> show table status where name = 'tra' \G;
結果
*************************** 1. row ***************************
Name: tra
Engine: InnoDB ←ここ
Version: 10
Row_format: Compact
Rows: 1
Avg_row_length: 16384
Data_length: 16384
Max_data_length: 0
Index_length: 0
Data_free: 4194304
Auto_increment: NULL
Create_time: 2014-07-16 23:52:12
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.00 sec)
※MyISAMのテーブルをInnoDBに変更するには
ALTER TABLE <table名> ENGINE=InnoDB;
3.3. AUTO COMMITモードの確認
トランザクションが有効かどうか
mysql> SELECT @@autocommit;
結果
4. トランザクションのテスト実行
4.1. テストテーブル作成
mysql> create table tra (tname varchar(20));
4.2. トランザクション開始
mysql> START TRANSACTION;
4.3. データ挿入
mysql> insert into tra values ('hogehoge');
結果
select * from tra;
+----------+
| tname |
+----------+
| hogehoge |
+----------+
4.5. データを確認(空である)
mysql> select * from tra;
結果
Empty set (0.00 sec)
4.5. データ挿入
mysql> insert into tra values ('hogehoge');
4.4. コミット
mysql> COMMIT;
4.5. データを確認(追加されている)
mysql> select * from tra;
結果
+----------+
| tname |
+----------+
| hogehoge |
+----------+