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

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回のクエリで実行できます。

  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)

  2. MySQLで45日後の日付を計算し、新しい列として表示するクエリの書き方

    MySQLで45日後の日付を新しい列に表示する方法 日付・時刻型の列に45日を加算し、その結果を元の列とは別の新しい列として表示したい場合は、date_add() 関数を使うのが最も簡単です。ここでは、テーブルの作成からデータの挿入、そして45日を加算するクエリの実行まで、手順を追って解説します。 1. テーブルを作成する まず、DATETIME型の列「DueTime」を持つテーブルを作成します。 mysql> create table DemoTable1930 ( DueTime datetime ); Query OK, 0 rows affected (