MySQLで列のデフォルト値を変更する方法|ALTER TABLE構文の使い方を実例付きで解説
MySQLでは、テーブル作成後に列のデフォルト値(初期値)を変更したい場面がよくあります。そんなときに使うのが ALTER TABLE 文です。この記事では、実際にテーブルを作成し、デフォルト値を変更して動作を確認するまでの手順を、実行例とともにわかりやすく解説します。
デフォルト値とは
列にデフォルト値を設定しておくと、INSERT文でその列の値を指定しなかった場合に、自動的にデフォルト値が挿入されます。たとえばユーザー名の列に「John」というデフォルト値を設定すれば、名前を指定しないレコードには自動的に「John」が登録されます。
1. デフォルト値付きのテーブルを作成する
まず、UserName 列にデフォルト値「John」を設定したテーブルを作成します。
mysql> create table DemoTable
(
UserId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
UserName varchar(20) DEFAULT 'John'
);
Query OK, 0 rows affected (0.76 sec)
2. テーブル構造を確認する
DESC コマンドでテーブルの構造を確認しましょう。
mysql> desc DemoTable;
実行結果は以下のとおりです。UserName の Default 列に「John」が設定されていることがわかります。
+----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | UserId | int(11) | NO | PRI | NULL | auto_increment | | UserName | varchar(20) | YES | | John | | +----------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)
3. レコードを挿入してデフォルト値を確認する
値を指定せずにレコードを挿入してみます。
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.17 sec)
SELECT文ですべてのレコードを表示します。
mysql> select *from DemoTable;
名前を指定していませんが、デフォルト値の「John」が自動的に挿入されています。
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | +--------+----------+ 1 row in set (0.00 sec)
4. ALTER TABLEでデフォルト値を変更する
ここが本題です。ALTER TABLE ~ MODIFY 構文を使うことで、既存の列のデフォルト値を変更できます。今回は UserName のデフォルト値を「Chris」に変更します。
mysql> alter table DemoTable modify UserName varchar(20) DEFAULT 'Chris'; Query OK, 0 rows affected (0.19 sec) Records: 0 Duplicates: 0 Warnings: 0
ポイント:MODIFY句を使う場合は、データ型(ここでは varchar(20))も必ず指定する必要があります。データ型を省略するとエラーになるので注意してください。
5. 変更後のテーブル構造を確認する
再度 DESC コマンドで確認すると、Default 列が「Chris」に変わっていることがわかります。
mysql> desc DemoTable;
+----------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+----------------+ | UserId | int(11) | NO | PRI | NULL | auto_increment | | UserName | varchar(20) | YES | | Chris | | +----------+-------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec)
6. 新しいデフォルト値の動作を確認する
もう一度、値を指定せずにレコードを挿入してみます。
mysql> insert into DemoTable values(); Query OK, 1 row affected (0.11 sec)
SELECT文で全レコードを表示します。
mysql> select *from DemoTable;
新しく挿入されたレコード(UserId = 2)には、新しいデフォルト値「Chris」が適用されています。一方、変更前に挿入された既存レコード(UserId = 1)は「John」のまま変わっていません。
+--------+----------+ | UserId | UserName | +--------+----------+ | 1 | John | | 2 | Chris | +--------+----------+ 2 rows in set (0.00 sec)
補足:ALTER COLUMNを使った別の書き方
MySQL 8.0以降では、データ型を再指定しなくても済む ALTER COLUMN ~ SET DEFAULT 構文も利用できます。
mysql> alter table DemoTable alter column UserName set default 'Chris';
こちらの方が意図が明確で、既存の列定義(データ型など)に影響を与えないため、デフォルト値だけを変更したい場合におすすめです。なお、デフォルト値を削除したい場合は ALTER TABLE テーブル名 ALTER COLUMN 列名 DROP DEFAULT; を使用します。
まとめ
- MySQLで列のデフォルト値を変更するには
ALTER TABLE テーブル名 MODIFY 列名 データ型 DEFAULT '新しい値';を使う。 - MODIFY句ではデータ型の指定が必須。MySQL 8.0以降なら
ALTER COLUMN ~ SET DEFAULTも使える。 - デフォルト値の変更は新規に挿入されるレコードのみに適用され、既存レコードの値は変更されない。
-
MySQLで列の値の先頭に000(ゼロ埋め)を追加する方法
MySQLで列の値に000(ゼロ)を追加するには?MySQLで数値の先頭に「000」のようなゼロを追加して表示したい場合は、ZEROFILL属性を使用します。ZEROFILLを指定した列では、設定された表示幅に満たない桁数が自動的に0で埋められます。まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable1913 ( Code int(4) ZEROFILL AUTO_INCREMENT NOT NULL, PRIMARY KEY(Code) ); Query OK, 0 rows affected (0.00
-
MySQLでJSON型カラムにデフォルト値を設定する方法
MySQLでは、JSON型のカラムにもデフォルト値を設定できます。その場合は、DEFAULT制約を使用します。基本的な構文は以下の通りです。ALTER TABLE テーブル名 MODIFY COLUMN カラム名 JSON NOT NULL DEFAULT ( JSON_OBJECT() );サンプルテーブルの作成まず、動作確認用のテーブルを作成しましょう。ここでは demo24 というテーブルを作成します。mysql> create table demo24 -> ( -> employee_information text -> ) ->; Query OK,