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

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 も使える。
  • デフォルト値の変更は新規に挿入されるレコードのみに適用され、既存レコードの値は変更されない。
  1. 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

  2. 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,