MySQLのALTER TABLEで既存テーブルに新しいカラムとインデックスを1つのクエリで追加する方法
MySQLでは、ALTER TABLE文を使うことで、既存のテーブルに新しいカラムを追加できます。さらに、同じステートメント内で ADD INDEX を組み合わせれば、新しいインデックスも同時に作成可能です。つまり、カラム追加とインデックス作成を1つのクエリでまとめて実行できるのです。
サンプルテーブルの作成
まずは動作確認用のテーブルを作成しましょう。
mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> Name varchar(100),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.69 sec)テーブル構造の確認
DESCコマンドでテーブルの構造を確認します。
mysql> desc DemoTable;
実行結果は以下のとおりです。
+-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(100) | YES | | NULL | | +-------+--------------+------+-----+---------+----------------+ 2 rows in set (0.01 sec)
カラムとインデックスを同時に追加するALTER文
それでは、新しいカラム「ArrivalDate」と、そのカラムに対するインデックスを1つのクエリで追加してみましょう。ポイントは、ADDでカラムを定義し、続けて ADD INDEX() でインデックスを指定することです。
mysql> alter table DemoTable
-> add ArrivalDate DATETIME DEFAULT NOW(),
-> add index(ArrivalDate);
Query OK, 0 rows affected (2.05 sec)
Records: 0 Duplicates: 0 Warnings: 0上記のクエリでは、「ArrivalDate」というDATETIME型のカラムを追加し、デフォルト値として現在の日時(NOW())を設定しています。同時に、このカラムに対するインデックスも作成されます。
変更後のテーブル構造の確認
再度テーブルの構造を確認して、変更が正しく反映されたかチェックしましょう。
mysql> desc DemoTable;
実行結果は以下のとおりです。
+-------------+--------------+------+-----+-------------------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+--------------+------+-----+-------------------+----------------+ | Id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(100) | YES | | NULL | | | ArrivalDate | datetime | YES | MUL | CURRENT_TIMESTAMP | | +-------------+--------------+------+-----+-------------------+----------------+ 3 rows in set (0.01 sec)
出力結果を見ると、新しいカラム「ArrivalDate」が追加され、Key列が「MUL」と表示されていることから、インデックスも正常に作成されたことがわかります。このように、ALTER TABLE文を活用すれば、複数のスキーマ変更を効率的に1回のクエリで実行できます。
-
MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法
MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)
-
MySQLで45日後の日付を計算し、新しい列として表示するクエリの書き方
MySQLで45日後の日付を新しい列に表示する方法 日付・時刻型の列に45日を加算し、その結果を元の列とは別の新しい列として表示したい場合は、date_add() 関数を使うのが最も簡単です。ここでは、テーブルの作成からデータの挿入、そして45日を加算するクエリの実行まで、手順を追って解説します。 1. テーブルを作成する まず、DATETIME型の列「DueTime」を持つテーブルを作成します。 mysql> create table DemoTable1930 ( DueTime datetime ); Query OK, 0 rows affected (