DBeaverでカラムを追加・変更・削除する方法(ALTER TABLE)|MySQL操作⑥
※ 本記事にはアフィリエイト広告(Amazonアソシエイト・楽天アフィリエイト等)が含まれています。
今回扱うのは、すでにあるテーブルの「列」をあとから作り替える操作です。全体像はこの図のとおりです。
DBeaverでMySQLのカラムを追加・変更・削除しよう
前回の DBeaverでテーブルからデータを取得する方法(SELECT文)|MySQL操作⑤ まで、データベースとテーブルを作り、レコードを入れて取り出すところまで進めてきました。
実際に使い始めると、「あとから列を足したい」「文字数が足りなかった」「列名を付け間違えた」ということが必ず起きます。私も、最初に varchar(20) で作った列に長い値が入らず、作り直そうか迷ったことがあります。テーブルを消して作り直す必要はなく、ALTER TABLE で中身を残したまま列だけ直せます。
カラムの基本的な追加と削除は DBeaverでテーブルを作成・削除・カラム追加する方法|MySQL操作③ で一度触れました。今回はその続きとして、位置を指定した追加、型と名前の変更、そして事故を防ぐ確認手順までまとめます。
SQLの実行方法はこれまでと同じです。DBeaverのSQLエディタに入力し、実行したい文にカーソルを合わせて Ctrl + Enter です。
作業前に今のカラム構成を確認する
変更する前に、いまテーブルがどうなっているかを必ず見ておきます。
desc my_first_db.table;
desc は describe の省略形で、カラム名・型・NULLを許すか・初期値などが一覧で返ってきます。show columns from my_first_db.table; でも同じ結果です。
変更したあとにも同じ文を実行して、意図どおりになったかを確かめます。この「前後で desc」を習慣にするだけで、ミスにすぐ気づけるようになります。
カラムを追加する(ADD COLUMN)
基本の追加
alter table my_first_db.table
add column memo varchar(255) default null comment 'メモ';
add column のあとに「カラム名・データ型・制約」の順で書きます。位置を指定しないと、テーブルのいちばん最後に追加されます。
位置を指定して追加する(AFTER / FIRST)
列の並び順を揃えたいときは after か first を付けます。
alter table my_first_db.table
add column t_kana varchar(50) default null after t_name;
これで t_name の直後に t_kana が入ります。先頭に入れたいときは after 〇〇 の代わりに first と書きます。
列の順番はSQLの動作には影響しませんが、DBeaverで中身を眺めるときの見やすさが全然違います。関連する列は隣に置いておくのがおすすめです。
複数のカラムをまとめて追加する
alter table my_first_db.table
add column price int unsigned not null default 0,
add column stock int unsigned not null default 0;
add column をカンマでつなぐと、1回の実行で複数列を追加できます。
not null の列を追加するときは、default を一緒に指定しておくと安心です。既存の行には、その初期値が入ります。
カラムの型や制約を変更する(MODIFY COLUMN)
名前はそのままで、型・長さ・NULL許可などを変えたいときは modify を使います。
alter table my_first_db.table
modify column t_name varchar(100) not null;
t_name を varchar(20) から varchar(100) に広げる例です。
ここで注意が1つあります。MODIFY は列の定義を丸ごと書き直す命令です。もともと付けていた not null や default、comment を書き忘れると、それらは消えてしまいます。変更前に desc で今の定義を確認し、残したいものはすべて書き直してください。
型を小さくする変更(varchar(100) → varchar(10) など)は、入っているデータが収まらないとエラーになるか、設定によっては切り詰められます。広げる方向の変更はほぼ安全ですが、狭める方向は慎重に行いましょう。
カラム名を変更する(CHANGE / RENAME COLUMN)
CHANGE COLUMN で名前と型を同時に変える
alter table my_first_db.table
change column t_value t_note varchar(100) default null comment '備考';
change column 旧カラム名 新カラム名 定義 の順に書きます。名前だけ変えたい場合でも、定義を省略できない点に注意してください。MODIFY と同じく、書かなかった制約は消えます。
RENAME COLUMN で名前だけ変える(MySQL 8.0以降)
alter table my_first_db.table
rename column t_note to t_value;
MySQL 8.0以降なら、rename column で定義を書かずに名前だけ変えられます。うっかり制約を消す心配がないので、名前だけ変えるならこちらが確実です。
MySQL 5.7ではこの構文がエラーになるので、change column を使います。MAMPのバージョンによって中のMySQLも違うため、使っているバージョンは次の文で確認できます。
select version();
カラムを削除する(DROP COLUMN)
alter table my_first_db.table
drop column t_kana;
複数まとめて消すときは、追加と同じくカンマでつなぎます。
alter table my_first_db.table
drop column price,
drop column stock;
列を消すと、その列に入っていたデータも全行ぶん消えます。実行前に select で中身を見て、本当に不要か確かめてから消してください。SELECTの書き方は MySQL操作⑤ で紹介しています。
SQLを書かずにDBeaverの画面で変更する方法
DBeaverでは、SQLを書かずに画面からカラムを編集することもできます。
- 左のナビゲーターで対象のテーブルをダブルクリックして開く
- 「プロパティ」タブの中にある「カラム」の一覧を表示する
- 一覧の上で右クリックし、新しいカラムの作成や既存カラムの編集・削除を選ぶ
- 編集後に保存すると、実行されるSQLの確認画面が出るので、内容を見てから実行する
私がいいなと思っているのは4番目です。画面で操作しても、裏で実行される ALTER TABLE 文を実行前に見せてくれます。GUIで直しつつ、SQLの書き方も覚えられます。
ただ、どのSQLが流れたかを後から振り返りやすいのはSQLエディタのほうです。慣れてきたら、SQLで書いて実行する方法をメインにするのがおすすめです。
まとめ:ALTER TABLE でよく使う書き方
| やりたいこと | 書き方 |
|---|---|
| 最後に列を追加 | add column 名前 型 |
| 位置を指定して追加 | add column 名前 型 after 既存列 |
| 型・制約を変える | modify column 名前 新しい定義 |
| 名前と定義を変える | change column 旧名 新名 定義 |
| 名前だけ変える(8.0以降) | rename column 旧名 to 新名 |
| 列を削除 | drop column 名前 |
最後にもう一度。変更の前後に desc で確認すること、大事なテーブルは先にバックアップを取ること。この2つを守れば、ALTER TABLE はこわくありません。
MySQL操作シリーズの記事一覧
- ① DBeaverでMAMPのMySQLに接続する方法
- ② データベースを作成・削除する方法(CREATE/DROP DATABASE)
- ③ テーブルを作成・削除・カラム追加する方法(CREATE/ALTER/DROP TABLE)
- ④ レコードを追加・削除する方法(INSERT/DELETE)
- ⑤ テーブルからデータを取得する方法(SELECT文)
- ⑥ カラムを追加・変更・削除する方法(ALTER TABLE)← この記事
ぜひ参考にしてください!また!