MySQLのmodify column
を使用する際には既存の設定内容を削除しないように注意する必要があります。
この記事では実際のNG例を出しながら説明します。
環境
- MySQL: 8.0.28
用意するテーブルとカラム設定
以下のようなテーブルとカラムを用意しておきます。
test
テーブルに、id
とname
のカラムを持たせています。
mysql> show create table test;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE `test` (
`id` int DEFAULT NULL COMMENT 'ID',
`name` varchar(256) DEFAULT NULL COMMENT '名前'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
問題が発生する例
例えば、name
にnot null制約を追加したいとします。
alter table test modify column name varchar(256) not null;
上記のSQLを使用して、not null制約を追加することはできましたが、commentが削除されてしまいました。
mysql> show create table test;
+-------+------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE `test` (
`id` int DEFAULT NULL COMMENT 'ID',
`name` varchar(256) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
+-------+------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
対策
既存の他の設定内容も追加するようにしましょう。
設定内容を確認する際は、これまで使用しているshow create table
や以下のshow full columns
を使用することができます。
※not null制約を付与する前のカラム状態を表示しています。
mysql> show full columns from test;
+-------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
+-------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
| id | int | NULL | YES | | NULL | | select,insert,update,references | ID |
| name | varchar(256) | utf8_general_ci | YES | | NULL | | select,insert,update,references | 名前 |
+-------+--------------+-----------------+------+-----+---------+-------+---------------------------------+---------+
2 rows in set (0.01 sec)
今度は、commentの設定を忘れないようにalter table
を記述します。
alter table test modify column name varchar(256) not null comment '名前';
上記のalter table
文を使用した結果、commentが削除されずにnot null制約を付与できていることが確認できます。
mysql> show create table test;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
| test | CREATE TABLE `test` (
`id` int DEFAULT NULL COMMENT 'ID',
`name` varchar(256) NOT NULL COMMENT '名前'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
まとめ
modify column
時に注意すべき点に関して説明しました。
既存の設定内容は記載を忘れがちな部分かと思いますので、変更した後の確認も含めて気を付けるようにしましょう。
コメント