MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLでテーブルをMyISAMからInnoDBに変換する方法

MySQLでは、テーブルのストレージエンジンは後から自由に変更できます。MyISAMからInnoDBへ変換するには、ALTER文を使用します。この記事では、実際にテーブルを作成し、ストレージエンジンを切り替え、その結果を確認するまでの一連の手順をサンプルコードとともに解説します。

1. MyISAMエンジンのテーブルを作成する

まず、デフォルトエンジンを「MyISAM」としてテーブルを作成します。次のクエリを実行してください。

mysql> create table DemoTable
-> (
-> ClientId int NOT NULL AUTO_INCREMENT,
-> ClientName varchar(100),
-> ClientAge int,
-> ClientCountryName varchar(100),
-> isMarried boolean,
-> PRIMARY KEY(ClientId)
-> )ENGINE=MyISAM;
Query OK, 0 rows affected (0.67 sec)

上記のクエリでは、顧客ID・氏名・年齢・国名・結婚の有無を持つ「DemoTable」を作成し、ENGINE=MyISAMを明示的に指定しています。

2. MyISAMからInnoDBへ変換する

テーブルをMyISAMからInnoDBに変換するには、以下のALTER TABLE文を実行します。たった1行のクエリで完了します。

mysql> alter table DemoTable ENGINE=InnoDB;
Query OK, 0 rows affected (1.97 sec)
Records: 0 Duplicates: 0 Warnings: 0

3. 変換結果を確認する

変換が正しく行われたかどうかは、SHOW CREATE TABLE文でテーブルの定義を確認できます。

mysql> show create table DemoTable;

出力結果

実行すると、以下のようにENGINEがInnoDBに更新されていることが確認できます。

+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| DemoTable | CREATE TABLE `DemoTable` (`ClientId` int(11) NOT NULL AUTO_INCREMENT, `ClientName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `ClientAge` int(11) DEFAULT NULL, `ClientCountryName` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `isMarried` tinyint(1) DEFAULT NULL, PRIMARY KEY (`ClientId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci |
+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

まとめ

このように、ALTER TABLE テーブル名 ENGINE=InnoDB; の1文だけで、既存のデータを保持したままストレージエンジンを変更できます。InnoDBはトランザクション処理や行レベルロック、外部キー制約をサポートしており、現在のMySQLでは標準のストレージエンジンとして推奨されています。MyISAMからの移行により、データの整合性や同時実行性能が大幅に向上するため、古いシステムのメンテナンス時には積極的な変換を検討しましょう。なお、大きなテーブルを変換する場合は処理に時間がかかることがあるため、事前にバックアップを取得しておくことをおすすめします。

  1. MySQLテーブルからUNIQUE制約(一意制約)を削除する方法

    MySQLのUNIQUE制約とはUNIQUE制約(一意制約)とは、テーブルの特定カラムに重複した値を登録できないようにする制約です。まずは、UNIQUE制約を持つテーブルを作成して、その動作を確認してみましょう。UNIQUE制約付きテーブルの作成以下のクエリで、NameカラムにUNIQUE制約を設定したテーブルを作成します。 mysql> create table UniqueConstraintDemo -> ( -> Name varchar(200) unique -> ); Query OK, 0 rows affected (1.05 sec

  2. MySQLテーブルがMyISAMまたはInnoDBエンジンを使用しているか確認する方法

    MySQLテーブルのストレージエンジンを確認するには? MySQLでテーブルがMyISAMまたはInnoDBのどちらのストレージエンジンを使用しているかを確認したい場合、SHOW TABLE STATUSコマンドを使うのが最も手軽な方法です。このコマンドを実行すると、エンジンの種類だけでなく、行数や作成日時、照合順序など、テーブルに関する詳細情報を一度に取得できます。 基本構文 SHOW TABLE STATUS FROM データベース名 LIKE テーブル名; 上記の構文では、指定したデータベース内の特定のテーブルに関する情報が表示されます。Engine列の値を確認することで、そのテーブル