Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLのalterについてまとめています。

サンプルSQLでは、MySQL8.0.18を使用しています。

SQLのalterは、既存のデータベースオブジェクトを変更する

alterは、データベースオブジェクトの特性を変更するDDL(データ定義言語)の命令です。SQL92の標準規格として定義されています。

【関連記事】
SQLとはどういうもの? 独自拡張と標準SQLの大きな違いって、何?

一般的に、以下の構文で使用します。既存のデータベース、テーブル、ユーザなどの属性を変更します。

alter オブジェクト種類 オブジェクト名 パラメータ

alter database データベースを変更する

データベースのキャラクターセットや照合順序(COLLATION)を変更できます。

以下のSQLでは、以下をおこなっています。

  1. show databasesで現在のデータベース一覧を確認
  2. データベース testdbを作成
  3. testdbの属性情報を取得
  4. alter databseで、キャラクターセットをsjisに、照合順序をsjis_japanese_ciに変更
  5. 変更後のtestdbの属性情報を取得
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| employees          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| testdb             |
+--------------------+
6 rows in set (0.16 sec)

mysql> show create database testdb;
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| Database | Create Database                                                                                                                  |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
| testdb   | CREATE DATABASE `testdb` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+----------+----------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> select * from information_schema.schemata where schema_name='testdb';
+--------------+-------------+----------------------------+------------------------+----------+--------------------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION |
+--------------+-------------+----------------------------+------------------------+----------+--------------------+
| def          | testdb      | utf8mb4                    | utf8mb4_0900_ai_ci     |     NULL | NO                 |
+--------------+-------------+----------------------------+------------------------+----------+--------------------+
1 row in set (0.00 sec)

mysql> alter database testdb character set sjis collate sjis_japanese_ci;
Query OK, 1 row affected (0.04 sec)

mysql> select * from information_schema.schemata where schema_name='testdb';
+--------------+-------------+----------------------------+------------------------+----------+--------------------+
| CATALOG_NAME | SCHEMA_NAME | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH | DEFAULT_ENCRYPTION |
+--------------+-------------+----------------------------+------------------------+----------+--------------------+
| def          | testdb      | sjis                       | sjis_japanese_ci       |     NULL | NO                 |
+--------------+-------------+----------------------------+------------------------+----------+--------------------+
1 row in set (0.00 sec)

alter table テーブルを変更する

既存のテーブルの属性を変更します。

以下のSQLでは、テーブルemployees2のカラムhire_dateの後ろに、新しいカラムcol1 varchar(10)を追加し、descで追加後のテーブルカラム一覧を確認しています。

mysql> alter table employees2 add col1 varchar(10) after hire_date;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> desc employees2;
+------------+---------------+------+-----+---------+-------+
| Field      | Type          | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| emp_no     | int           | NO   | PRI | NULL    |       |
| birth_date | date          | NO   |     | NULL    |       |
| first_name | varchar(14)   | NO   |     | NULL    |       |
| last_name  | varchar(16)   | NO   |     | NULL    |       |
| gender     | enum('M','F') | NO   |     | NULL    |       |
| hire_date  | date          | NO   |     | NULL    |       |
| col1       | varchar(10)   | YES  |     | NULL    |       |
+------------+---------------+------+-----+---------+-------+

【関連記事】
SQL ALTER TABLEのサンプルSQL データベース製品によって、機能拡張が異なる

alter user ユーザを変更する

既存のユーザ情報を変更します。

下記は、既存のユーザ一覧を確認し、ユーザ user0@localhostのパスワードを「password1」に変更しています。

mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| root             | %         |
| user1            | %         |
| departments_only | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| select_only      | localhost |
| user0            | localhost |
+------------------+-----------+

mysql> alter user 'user0'@'localhost' identified by 'password1';
Query OK, 0 rows affected (0.01 sec)

【関連記事】
MySQLのユーザ一覧は、mysql.userを参照 権限一覧やパスワードハッシュ一覧の取得方法

まとめ

ポテパンダの一言メモ
  • SQLのalterは既存のデータベースオブジェクトを変更する
  • alter tableはデータベースの属性を変更する。
  • alter tableはデータベーステーブルの属性、カラムを変更する。
  • alter userはユーザの属性を変更する。パスワードの変更も可能。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。