テーブル構造の変更
このステップでは、ALTER TABLEコマンドを使用して既存のテーブルを変更する方法を学びます。データ要件が時間とともに変化する場合、これは一般的なタスクです。
既存の製品テーブルに新しい列を追加し、既存の列を変更しましょう。
- 新しい列を追加する:
ALTER TABLE products
ADD COLUMN manufacturer VARCHAR(100) AFTER name;
このコマンドは、name
列の後にmanufacturer
という名前の新しい列を追加します。
- 既存の列を変更する:
ALTER TABLE products
MODIFY COLUMN description VARCHAR(500) NOT NULL DEFAULT 'No description available';
このコマンドは、description
列を最大500文字の可変長文字列に変更します。また、新しい行に対してデフォルト値'No description available'を設定します。
- 列名を変更する:
ALTER TABLE products
CHANGE COLUMN weight product_weight DECIMAL(8,2);
このコマンドは、weight
列の名前をproduct_weight
に変更し、データ型を合計8桁で2桁の小数に変更します。
- 列を削除する:
ALTER TABLE products
DROP COLUMN in_stock;
このコマンドは、テーブルからin_stock
列を削除します。
クエリのパフォーマンスを向上させるために複合インデックスを追加しましょう。
ALTER TABLE products
ADD INDEX idx_name_manufacturer (name, manufacturer);
このコマンドは、name
列とmanufacturer
列に複合インデックスを作成します。
行った変更をすべて表示するには:
DESCRIBE products;
SHOW INDEX FROM products;
更新されたテーブル構造とインデックスが表示されるはずです。
MariaDB [store]> DESCRIBE products;
+----------------+---------------+------+-----+--------------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------+------+-----+--------------------------+-------------------------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(100) | NO | MUL | NULL | |
| manufacturer | varchar(100) | YES | | NULL | |
| price | decimal(10,2) | NO | | NULL | |
| description | varchar(500) | NO | | No description available | |
| product_weight | decimal(8,2) | YES | | NULL | |
| created_at | datetime | YES | | current_timestamp() | |
| last_updated | timestamp | NO | | current_timestamp() | on update current_timestamp() |
+----------------+---------------+------+-----+--------------------------+-------------------------------+
8 rows in set (0.001 sec)
MariaDB [store]> SHOW INDEX FROM products;
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Ignored |
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
| products | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | NO |
| products | 1 | idx_name_manufacturer | 1 | name | A | 0 | NULL | NULL | | BTREE | | | NO |
| products | 1 | idx_name_manufacturer | 2 | manufacturer | A | 0 | NULL | NULL | YES | BTREE | | | NO |
+----------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+
3 rows in set (0.000 sec)