19.【MySQL】テーブルの設計変更【ALTER TABLE】

MySQLで既に作成してあるテーブルの設計を後から変更する方法について解説します。設計の変更とはカラムを追加したり、削除したり、テーブル名を変更するといった操作を指します。

目次

カラムの追加 ADD

カラムを追加するには次のように記述します。

ALTER TABLE テーブル名 ADD カラム名 型;

実際にカラムを追加してみましょう。

-- titlesという名前のテーブルがあれば削除
DROP TABLE IF EXISTS titles;

 -- titlesという名前のテーブルを作成
CREATE TABLE titles (
  id INT NOT NULL AUTO_INCREMENT,
  author_id INT,
  post_title VARCHAR(50) UNIQUE,
  PRIMARY KEY (id)
);

-- レコードを挿入
INSERT INTO titles (author_id, post_title) VALUES
  (1, 'MySQLとは'),
  (2, 'SQLとはなにか'),
  (1, 'DockerでMySQLを使う方法');

-- カラムを追加
ALTER TABLE titles ADD view INT;

-- テーブルの構造を確認
DESC titles;

実行結果は次のとおりです。

Field   Type    Null    Key     Default Extra
id      int     NO      PRI     NULL    auto_increment
author_id       int     YES             NULL
post_title      varchar(50)     YES     UNI     NULL
view    int     YES             NULL

viewというカラムがINT型で追加されているのがわかります。

追加するカラムの位置を指定したい場合は次のように記述します。

ALTER TABLE テーブル名 ADD カラム名 型 FIRST; -- 一番上に追加
ALTER TABLE テーブル名 ADD カラム名 型 AFTER カラム名; 指定したカラムのあとに追加

実際に先ほどのviewカラムを一番上に追加してみましょう。

-- カラムを一番上に追加
ALTER TABLE titles ADD view INT FIRST;

-- テーブルの構造を確認
DESC titles;

実行結果は次のとおりです。

Field   Type    Null    Key     Default Extra
view    int     YES             NULL
id      int     NO      PRI     NULL    auto_increment
author_id       int     YES             NULL
post_title      varchar(50)     YES     UNI     NULL

viewカラムが一番上に追加されています。

カラムの削除 DROP

カラムを削除するには次のように記述します。

ALTER TABLE テーブル名 DROP カラム名;

実際に使ってみましょう。

-- カラムを一番上に追加
ALTER TABLE titles DROP post_title;

-- テーブルの構造を確認
DESC titles;

実行結果は次のとおりです。

Field   Type    Null    Key     Default Extra
id      int     NO      PRI     NULL    auto_increment
author_id       int     YES             NULL

指定したpost_titleカラムがテーブルから削除されています。

カラムの変更 CHANGE

カラムを変更するには次のように記述します。

ALTER TABLE テーブル名 CHANGE 変更前のカラム名 変更後のカラム名 変更後の型;

実際に使ってみましょう。

-- author_idカラムをBIGINT型のviewカラムに変更
ALTER TABLE titles CHANGE author_id view BIGINT;

-- テーブルの構造を確認
DESC titles;

実行結果は次のとおりです。

Field   Type    Null    Key     Default Extra
id      int     NO      PRI     NULL    auto_increment
view    bigint  YES             NULL
post_title      varchar(50)     YES     UNI     NULL

author_idカラムがviewカラムに変更され、型もBIGINTに変更されているのがわかります。

カラムを変更する場合、MySQLはなるべく保存されているデータを変換して保持しようとしますが、データが消えてしまったり、エラーになってしまうこともあるので注意しましょう。

テーブル名の変更 RENAME

テーブル名を変更するには次のように記述します。

ALTER TABLE 元のテーブル名 RENAME 新しいテーブル名;

実際に使ってみましょう。

-- titlesという名前のテーブルがあれば削除
DROP TABLE IF EXISTS titles;

 -- titlesという名前のテーブルを作成
CREATE TABLE titles (
  id INT NOT NULL AUTO_INCREMENT,
  author_id INT,
  post_title VARCHAR(50) UNIQUE,
  PRIMARY KEY (id)
);

-- レコードを挿入
INSERT INTO titles (author_id, post_title) VALUES
  (1, 'MySQLとは'),
  (2, 'SQLとはなにか'),
  (1, 'DockerでMySQLを使う方法');

-- postsという名前のテーブルが既にある場合は削除
DROP TABLE IF EXISTS posts;

-- titlesテーブルの名前をpostsに変更
ALTER TABLE titles RENAME posts;

-- データベース内のテーブルの一覧を確認
SHOW TABLES;

新しいテーブル名(今回はposts)と同じ名前のテーブルが既に存在する場合はエラーになってしまうので、テーブル名を変更する前にpostsテーブルの有無を確認し、既に存在する場合は削除しています。

実行結果は次のとおりです。

Tables_in_test
data_type
data_types
int_tests
posts

titlesテーブルがpostsテーブルに名前変更されています。

このエントリーをはてなブックマークに追加

コメントを残す

頂いたコメントは一読した後表示させて頂いております。
反映まで数日かかる場合もございますがご了承下さい。