MySQLでVARCHAR型のカラムをNULL許容に変更する方法
MySQLでは、テーブルのカラム定義を後から変更できます。既存のVARCHAR型カラムをNULL値を許容する設定に変更したい場合は、ALTER TABLE文とCHANGE句を組み合わせて使用します。
基本構文
カラムをNULL許容に変更するには、以下の構文を使用します。
ALTER TABLE テーブル名 CHANGE 変更前カラム名 変更後カラム名 データ型 NULL DEFAULT NULL;
ポイントは、CHANGE句の後に「現在のカラム名」と「新しいカラム名」の両方を指定する必要がある点です。カラム名を変えない場合でも、同じ名前を2回記述します。また、データ型も改めて指定する必要があります。
実例:テーブルの作成
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable1356
-> (
-> FirstName varchar(30)
-> );
Query OK, 0 rows affected (0.56 sec)この時点では、FirstNameカラムはNULL値を受け付けない(NOT NULL)状態になっています。
カラムをNULL許容に変更する
先ほどの構文を使って、FirstNameカラムをNULL許容に変更してみましょう。
mysql> alter table DemoTable1356 change FirstName FirstName varchar(30) NULL DEFAULT NULL; Query OK, 0 rows affected (0.17 sec) Records: 0 Duplicates: 0 Warnings: 0
これで、FirstNameカラムにはNULL値を挿入できるようになりました。「DEFAULT NULL」を指定することで、値が省略された場合にも自動的にNULLが設定されます。
テストデータの挿入
動作を確認するため、INSERTコマンドでいくつかレコードを挿入します。通常の文字列だけでなく、空のVALUESや明示的なNULLも挿入してみます。
mysql> insert into DemoTable1356 values('Adam');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1356 values('John');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1356 values();
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1356 values('Bob');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1356 values(NULL);
Query OK, 1 row affected (0.24 sec)このように、値を省略したINSERT文でもエラーなく登録できることがわかります。
結果の確認
SELECT文ですべてのレコードを表示して確認しましょう。
mysql> select * from DemoTable1356;
実行結果は以下の通りです。
+-----------+ | FirstName | +-----------+ | Adam | | John | | NULL | | Bob | | NULL | +-----------+ 5 rows in set (0.00 sec)
まとめ
ALTER TABLE ... CHANGE文を使えば、既存のVARCHAR型カラムを簡単にNULL許容へ変更できます。カラム名・データ型・NULL/NOT NULLの指定をすべて記述する必要がある点に注意してください。なお、MySQL 8.0以降では、より直感的な「MODIFY」句を使っても同じ結果が得られます。
-
MySQLでテーブルの重複を除いたレコードから平均値を取得するクエリの書き方
MySQLで平均値を求めるには AVG() 関数を使用します。さらに DISTINCT と組み合わせることで、重複しているレコードを除外した状態で平均を計算することができます。この記事では、実際にサンプルテーブルを作成しながら、個別(ユニーク)なレコードから平均値を取得する方法を解説します。サンプルテーブルの作成まず、以下のクエリでテーブルを作成します。mysql> create table DemoTable1934 ( StudentName varchar(20), StudentMarks int ); Query OK, 0 rows affec
-
MySQLのVARCHAR型カラムから最大値を正しく取得する方法
VARCHAR型(文字列型)のカラムに対してそのまま MAX() 関数を使用すると、値は文字列として比較されるため、「8」「901」「10001」のような数値的な大小関係が正しく評価されません。そこで、CAST() を使って値を数値型に変換してから MAX() を適用することで、正確な最大値を取得できます。 1. サンプルテーブルを作成する まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable2030 -> ( -> Value varchar(20) -> ); Query OK, 0 row