マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

OSS情報

2020.01.01

【OSS情報アーカイブ】MySQL

【OSS情報アーカイブ】MySQL

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。

コンテンツ

「MySQL」とは

概要

MySQL(マイエスキューエル)とは、高速性と堅牢性を追及したマルチユーザ・マルチスレッドのオープンソースリレーショナルデータベース管理システム(RDBMS)です。世界中で最もよく利用されており、Oracle社が開発を行っています。

基本説明

MySQLは、オープンソースのデータベースとして「高速処理性能」や「安定性」に定評があります。

数多くのバージョンアップが繰り返され、各種機能強化や機能追加が行われ、現在では商用製品と比較しても遜色のないデータベース製品となっています。

マルチユーザー、マルチスレッド、レプリケーション、トランザクション管理など高度な機能が実装されています。

多くのプラットフォームに対応し、JavaやPHPのようなプログラム言語からも簡単にアクセスが可能です。

特に、WEBサービスに対して威力を発揮できる点が、注目を集め利用され続けてきている理由となっています。

主要開発元

MySQLはオープンソースですが、オラクル社によって開発やソースコード管理が行われています。

MySQLは有償版(「MySQL Standard Edition」など)と、無償版「MySQL Community Server」の2種類が提供されています。

市場シェア

MySQLの世界での市場シェアは、PostgreSQLなどの他のオープンソースデータベースを圧倒しています。

日本市場では、MySQLの文字コードサポートが不十分だったという問題などもあり、当初は伸び悩みましたが、文字コード問題も解消され、近年ではPostgreSQLに匹敵し、上回ってくるまでにシェアを広げています。

ユースケース

MySQLは、レンタルサーバのデータベースとしてよく利用されています。

また、Google、Facebook、YouTube、Yahooのような世界的Webサービス企業にも多くの導入実績があります。

オフィシャルサイト情報

■オフィシャルサイト

→mysql.com

■ライセンス情報

MySQLのライセンスは「GNU General Public License」です。

詳細について、こちらを参照ください。
→oracle.com →Oracle Technology Network →Database  →MySQL

■ダウンロード

→MySQL →MySQL Community Downloads

同様製品

同様な機能を提供する製品として、次のようなものがあります。

オープンソース製品:「PostgreSQL」「MariaDB」など。

高機能性

MySQLは、高速ロードユーティリティ、各種オプティマイザ、メモリキャッシュ機構、全文インデックス、その他のパフォーマンス強化機能など、高速トランザクション処理を実現するアークテクチャを実装しています。

また、1日あたり10億件ものクエリを処理するような大規模Webサイトなどでの過酷なパフォーマンス要件に対しても対応できる可用性を保持しています。

可用性

大規模Webサイトなどでの過酷なパフォーマンス要件に対しても十分に対応できる可用性を保持しています。

堅牢なデータ保護機能

MySQLは「ユーザ認証」「アクセス権限」「パスワード管理機能」「接続安全性を保証するSSHやSSLでの接続」「データ暗号化・復号化機能」など、データを保護するための各種セキュリティ機能を備えています。

管理容易性

MySQLは、インストールと設定が15分で完了して速やかに導入できるとされています。

インストール完了後は「自動スペース拡張機能」「自動再起動機能」「動的設定変更機能」などの自己管理機能により、データベース管理者の負担を軽減します。

また、グラフィカル管理ツールと移行ツールが多数用意されています。データベース管理者は、1台の端末から、複数のMySQLサーバの監視、管理、トラブルシューティングなどを行えます。

そして、サードパーティソフトウェアベンダも、データ設計、ETL処理、ジョブ管理、パフォーマンス監視など、MySQL向けの多彩なツール群を提供しています。

「MySQL」参考情報 「第1回MySQLのコマンド」+「第2回MySQLのバージョン確認」

「MySQL」参考情報 第1回 MySQLのコマンド

■(1)MySQLコマンド概要

MySQLコマンドとは

「MySQLコマンド」は、データベース作成/テーブル作成/レコード登録/レコード検索などの処理内容を「MySQLデータベース」に対して伝達するための手段です。

MySQLサーバへの接続(MySQLプロンプトの起動)

MySQLをインストールすると、「test」という空のデータベースがデフォルトで用意されます。この「test」データベースに接続します。

MySQLデータベースを起動後、コンソールで「mysql test」と打ち込むと、「test」データベースに接続されます。

接続成功のメッセージが表示され、プロンプトが「mysql>」となります。MySQLデータベースに対して、さまざまな処理命令(コマンド)を出せます。

コマンド文の終了はセミコロン

コマンドを使う場合、コマンドの終了にはセミコロンが必要です。コマンドの途中で改行しても、セミコロンが入力されるまで、処理コマンド文が続いていると判断されます。

補完機能

MySQLプロンプトでは、ヒストリ機能や補完機能を使用できます。

[↑]キーを押すと、以前に入力したコマンドが表示されます。

「sele」と入力して、[Tab]キーを押すと、「select」と補完されます。続けて、[Tab]キーを押すと、入力可能なコマンドやテーブル名が表示されます。

MySQLプロンプトの終了

「mysql> quit;」と入力すると、MySQLプロンプトが終了します。また、[Ctrl]+[D]でも終了します。

■(2)MySQLコマンドがよく分かるお役立ちサイト

MySQL 逆引きリファレンス

「MySQL サーバが起動中であるかを確認する」「コマンドラインから MySQL 接続時にポート番号を指定する」「SQL 問い合わせ結果をXML形式で表示する」「プロセスを強制的に停止する(mysqladmin)」などの逆引きリファレンスとして利用できます。

→MySQL 逆引きリファレンス

「MySQL」参考情報 第2回 MySQLのバージョン確認

■(1)MySQLバージョン確認方法

「MySQLのバージョン情報」を確認する手段としては、いろいろな方法があります。

MySQL接続前

1)mysqlコマンドで確認
『mysql –version』or『mysql -V』

2)mysqladminコマンドで確認
『mysqladmin version』

MySQL接続時

MySQL接続時に表示されるウェルカムメッセージの中に、バージョン情報が表示されます。

MySQL接続後

1)STATUSコマンドで確認
『STATUS』

2)version関数で確認
『SELECT VERSION();』

3)「SHOW VARIABLES」で確認
『SHOW VARIABLES LIKE ”version%”;』

■(2)MySQLバージョンアップの歴史

MySQLの誕生から現在までの、「主要なバージョンアップ」と「変遷」について紹介します。

黎明期

・1995年05月:MySQL誕生
・1998年01月:最初のWindows版リリース
・2001年01月:Version 3.23 プロダクションリリース
・2003年03月:Version 4.0 プロダクションリリース—「union」搭載
・2004年10月:Version 4.1 プロダクションリリース—「R木」「B木」「サブクエリ」「prepared statements」搭載
・2005年10月:Version 5.0 プロダクションリリース—「cursors」「stored procedures」「triggers」「views」「XA transactions」搭載

SunMicrosystems期

・2008年02月:SunMicrosystemsが「MySQL AB」を買収
・2008年07月:SunMicrosystemsが「MySQL株式会社」(MySQL日本法人)を吸収合併
・2008年11月:Version 5.1 プロダクションリリース—「event scheduler」「partitioning」「plugin API」「row-based replication」「server log tables」搭載

Oracle期

・2010年06月:日本オラクル株式会社がSunMicrosystems株式会社を統合
・2010年12月:Version 5.5 プロダクションリリース—デフォルトストレージエンジンが「InnoDB」に変更、マルチコアCPUパフォーマンスUP
・2013年02月:Version 5.6 プロダクションリリース—「InnoDB」機能強化、「NoSQL」機能強化
・2015年10月:Version 5.7 プロダクションリリース

「MySQL」参考情報 「第3回MySQLデータベースの作成と削除」+「第4回MySQLのデータベース一覧」

「MySQL」参考情報 第3回 MySQLデータベースの作成と削除

■【1】MySQLデータベース作成(CREATE DATABASE)

MySQLの中に複数のデータベースを作成できます。サンプルとして、刀剣情報を管理するための「ToukenDB」データベース作成を行います。

(1)MySQL起動&接続

1.コマンドプロンプト(コンソール)を起動
2.『net start mysql』→Enterキー
3.『mysql -u root -p』→Enterキー
4.パスワード入力→Enterキー

(2)既存データベース確認

『SHOW DATABASES;』→Enterキー

※既存データベースが表示されます。初期状態であれば、「information_schema」「mysql」「test」の3つのデータベースが表示されるはずです。

※「information_schema」と「mysql」データベースは、MySQLが使用するデータベースです。「test」は、デフォルトで作成されるテスト用データベースです。

(3)データベース作成

『CREATE DATABASE ToukenDB;』→Enterキー

※作成完了メッセージが表示されます。

※データベース名は64バイト以内で設定する必要があります。

※すでに存在しているデータベースと同名のデータベースを作成しようとすると、エラーメッセージが表示されます。

(4)作成確認

『SHOW DATABASES;』→Enterキー

※存在しているデータベースとして、「ToukenDB」が表示されます。

■【2】MySQLデータベース削除(DROP DATABASE)

削除用サンプルデータベース「SampleDB」を作成して、データベース削除を行います。

(1)MySQL起動&接続

1.コマンドプロンプト(コンソール)を起動
2.『net start mysql』→Enterキー
3.『mysql -u root -p』→Enterキー
4.パスワード入力→Enterキー

(2)削除用サンプルデータベース作成

『CREATE DATABASE SampleDB;』→Enterキー

※作成完了メッセージが表示されます。

(3)既存データベース確認

『SHOW DATABASES;』→Enterキー

※既存データベースが表示されます。MySQL用データベース(「information_schema」、「mysql」、「test」)+「ToukenDB」+「SampleDB」が表示されるはずです。

(4)データベース削除

『DROP DATABASE SampleDB;』→Enterキー

※「SampleDB」が削除されます。

(5)削除確認

『SHOW DATABASES;』→Enterキー

※「SampleDB」が削除されていることを確認します。

データベース削除に関する注意点

MySQLのデフォルトの仕組みとして、「データベース削除の取り消し」機能はありません。

うっかりデータベースを削除してしまった場合、中のデータを復活させることはできません。

作業開始前にバックアップを必ず取るようにして、そのような事態に備えることが必要です。

「MySQL」参考情報 第4回 MySQLデータベースの作成と削除

■【1】データベース一覧表示コマンド

MySQLのデータベース一覧を表示する方法として、いくつかの方法があります。

【コンソール】「mysqlshow」コマンド

コンソール(コマンドプロンプト)から、データベース一覧を表示します。
1.『C:¥mysql¥bin> mysqlshow -u root -p』→Enterキー
2.「Enter password:」と表示されるので、パスワードを入力します。→Enterキー

【MySQLプロンプト】「SHOW DATABASES」コマンド

MySQLプロンプトから、データベース一覧を表示します。
1.『mysql>SHOW DATABASES;』→Enterキー

ワイルドカードを使用して検索表示できます。
1.『mysql>SHOW DATABASES LIKE ”Touken%”;』→Enterキー
※「Touken」で始まるデータベース(「ToukenDB」、「ToukenDB_temp」、「ToukenDB_backup」など)のみが表示されます。

■【2】PHP用サンプルコード例

MySQLのデータベース一覧を取得するためのPHPサンプルコードを紹介します。

「mysql_query」関数を使用するサンプルコード

$result = mysql_query(‘show databases’);
while($loop = mysql_fetch_assoc($result)){
  echo $loop[”Database”];
}

「mysql_query」関数を使用して、「show databases」コマンドを発行して、取得したデータを1件ずつループフェッチして表示します。

「mysql_db_name」関数を使用するサンプルコード

$dbc=mysql_connect(‘localhost’,’root’,’);
$db_list=mysql_list_dbs($dbc);

$i=0;
$db_list_max=mysql_num_rows($db_list);
while ($i<$db_list_max){
  echo mysql_db_name($db_list,$i).’¥n’;
  $i++;
}

「mysql_fetch_object」関数を使用するサンプルコード

$dbc=mysql_connect(‘localhost’,’root’,’);
$db_list=mysql_list_dbs($dbc);

$db_list=mysql_list_dbs($dbc);
while($dat=mysql_fetch_object($db_list)){
  echo $dat->Database.’¥n’;
}

「MySQL」参考情報 「第5回MySQLのユーザ作成」+「第6回MySQLのユーザ一覧」

「MySQL」参考情報 第5回 MySQLのユーザ作成

■【1】ユーザ作成/パスワード設定(CREATE USER)

MySQLをセットアップした直後は、「root」ユーザしか存在しません。「root」ユーザは、全権限を保持しているため、そのままDB操作を行いミスなどがあると、思わぬ事態になってしまうことがあります。

そのため、必要な操作権限のみを持つユーザを作成して、普段の作業は、そのユーザで行うようにするべきです。

ユーザ作成

ユーザを作成するためには、MySQLプロンプトで「CREATE USER」コマンドを使用します。

サンプルとして、ユーザ「Okita_Souji(沖田総司)」を作成します。

CREATE USER ”Okita_Souji”@”Shinsen_gumi” IDENTIFIED BY ”gintama”;

ユーザ名@ドメイン名

『”Okita_Souji”@”Shinsen_gumi”』は、「ユーザ名+@+ドメイン名」を表します。

ドメイン名とは、そのユーザが所属するホスト名(サーバ名)のことです。

このサンプルでは、「Shinsen_gumi(新選組)」ドメインに所属する「Okita_Souji(沖田総司)」という意味になります。

該当するドメインでなければ、ログインできません。

※通常は、ドメイン名に「localhost」を設定します。

パスワード設定

『IDENTIFIED BY ”gintama”』の部分でパスワードを指定します。

ユーザ「Okita_Souji」のパスワードを「gintama(銀魂)」に設定します。

■【2】権限設定(GRANT)

権限が何もないユーザは、何もできません。

作成したユーザ「Okita_Souji」に、「GRANT」コマンドで権限を付与します。

「GRANT」構文

GRANT 権限 ON レベル TO user;

権限

権限は「どのようなことができるか」という設定です。

「SELECT」、「INSERT」、「UPDATE」、「DELETE」など、多くの種類があります。

レベル

レベルは「どの範囲でできるのか」という設定です。

5つのレベルがあります

1.グローバルレベル(G)—すべてのデータベース
2.データベース レベル(D)—特定データベース内のすべてのオブジェクト
3.テーブルレベル(T)—特定テーブル内のすべてのカラム
4.カラムレベル(C)—特定テーブルの特定カラム
5.ルーチンレベル—ストアドルーチン

「GRANT」サンプル文

GRANT CREATE,DROP,SELECT,INSERT,UPDATE,DELETE ON ToukenDB TO ”Okita_Souji”@”Shinsen_gumi”;

「Shinsen_gumi(新選組)」ドメインに所属するユーザ「Okita_Souji(沖田総司)」に、「ToukenDB(刀剣DB)」データベースに対する「CREATE,DROP,SELECT,INSERT,UPDATE,DELETE」権限を付与しています。

■【3】ユーザ削除(DROP USER)

「DROP USER」構文

DROP USER ”user”@”localhost”;

「MySQL」参考情報 第6回 MySQLのユーザ一覧

■【1】ユーザ一覧表示

ユーザは「mysql」データベースの「user」テーブルで管理されています。

このテーブルをSELECTすることでユーザ一覧を参照できます。「user」テーブルに対する「SELECT」権限を持つユーザのみが参照可能です。

参照方法

『mysql> select Host, User, Password from mysql.user;』

Host User Password
localhost root *********
Shinsen_gumi Okita_Souji *********
localhost
匿名ユーザ

上記サンプル出力3行目のように、「ユーザ名」が空、「パスワード」設定なし、のようなユーザが存在している場合があります。

MySQLサーバに接続する際には、ユーザ名とパスワードが必要になりますが、MySQLインストール時にデフォルトで「匿名ユーザ」が作成されています。

この「匿名ユーザ」のパスワードは未設定であるため、誰でもログインできてしまう状態になっています。そのため、匿名ユーザのパスワードを設定するか、もしくは、匿名ユーザを削除しておくことが推奨されています。

■【2】ユーザ権限表示

ユーザ権限を表示する方法として「SHOW GRANTS」コマンドを使用します。

構文

SHOW GRANTS FOR ユーザ名@ホスト名;

参照方法(1) 「SHOW GRANTS」ユーザ指定

『mysql> SHOW GRANTS FOR Okita_Souji@Shinsen_gumi;』

指定したユーザに対して付与されている権限が GRANTステートメントの形で表示されます。

参照方法(2) 「SHOW GRANTS」接続ユーザ

『mysql> SHOW GRANTS;』

ユーザ名を省略すると、現在接続しているユーザの権限が表示されます。

参照方法(3) SELECT文サンプル

「mysql」データベースの「db」テーブルに対するSELECT文を発行することでも、権限情報を参照できます。

『mysql> SELECT * FROM mysql.db WHERE user = ”Okita_Souji” AND host = ”Shinsen_gumi” AND db = ”ToukenDB” ¥G;』

※SQL文の最後に、メタコマンドである「¥G」オプションを付けると、問い合わせ結果が縦に表示され、見やすくできます。

「MySQL」参考情報 「第7回MySQLテーブルの作成と削除」+「第8回MySQLテーブル一覧」

「MySQL」参考情報 第7回 MySQLテーブルの作成と削除

■【1】テーブル作成(CREATE TABLE)

「CREATE TABLE」構文

CREATE TABLE テーブル名 (
  カラム名 データ型 (オプション),
  カラム名 データ型 (オプション),
  カラム名 データ型 (オプション)
);

※「テーブル名」と「カラム名」は64バイト以内

サンプルテーブル1(刀剣テーブル)

刀剣情報を格納するテーブルを作成します。

CREATE TABLE Touken (
  #刀剣ID(NULL禁止、ID自動設定)
  id INT(11) NOT NULL AUTO_INCREMENT,
  #刀剣名
  name VARCHAR(64),
  #武将ID 刀剣の持ち主
  busho_id INT(11),
  #「PRIMARY KEY」を「id」に指定
  PRIMARY KEY (id)
);

サンプルテーブル2(武将テーブル)

武将情報を格納するテーブルを作成します。

CREATE TABLE Busho (
  #武将ID(NULL禁止、ID自動設定)
  id INT(11) NOT NULL AUTO_INCREMENT,
  #武将名
  name VARCHAR(64),
  #「PRIMARY KEY」を「id」に指定
  PRIMARY KEY (id)
);

「NOT NULL」オプション

「id」カラムに「NOT NULL」オプションを指定してあります。

対象テーブルにレコードが追加される際に、「id」カラムが空(null)であることを禁止します。

「AUTO_INCREMENT」オプション

「id」カラムに「AUTO_INCREMENT」オプションを指定してあります。

対象テーブルにレコードが追加される際に、「id」カラムにセットされるデータが空(null)であった場合に、最初に「1」をセットします。

以降は、レコードが追加されるたびに、自動で、「前回追加した値+1」の値がセットされます。

わざわざ「id」値を指定しなくても、自動で、「1,2,3,・・・」とセットしてくれます。

「PRIMARY KEY」

「PRIMARY KEY (id)」とすることで、「id」カラムを「PRIMARY KEY」に設定しています。

「PRIMARY KEY」とは、そのカラム(もしくは、複数カラムの組合せ)で、一意となる(唯一のレコードであることが決定される)ものをいいます。別名「主キー」ともいわれます。

つまり、「idカラムに格納されている値は、全レコード違う値である」ことを強制する設定です。

「PRIMARY KEY」に対しては、自動でインデックスが作成されます。このサンプルの場合(大量のデータがある場合)、「id」カラムを抽出条件とした検索が速くなります。

■【2】テーブル削除(DROP TABLE)

「DROP TABLE」構文

DROP TABLE テーブル名;

注意点

バックアップを取っておけば復元することもできますが、間違えてテーブルを削除してしまわないように、気をつけましょう。

「MySQL」参考情報 第8回 MySQLテーブル一覧

■【1】テーブル一覧(SHOW TABLES)

テーブル一覧を取得する方法です。

SHOW TABLES [FROM データベース名][LIKE パターン]

『mysql> SHOW TABLES;』

カレントデータベースに存在するテーブル名(「Touken」「Busho」など)が表示されます。

※指定したデータベースに、テーブルが1つも存在しない場合は、「Empty set」と表示されます。

※指定したデータベースが存在しない場合は、エラーメッセージが返されます。

データベース指定

『mysql> SHOW TABLES from ToukenDB;』

「ToukenDB」に存在するテーブル一覧を表示します。カレントデータベースではないデータベースのテーブル一覧を取得する場合に指定します。

LIKE パターン

LIKE句を使用して、ワイルドカード抽出することもできます。

『mysql> SHOW TABLES LIKE ”Tou%”;』

「Tou」で始まるテーブルのみを表示します。

■【2】テーブル詳細情報(SHOW TABLE STATUS)

テーブル名のみではなく、各テーブルに対する詳細情報を取得できます。

SHOW TABLE STATUS [FROM データベース名] [LIKE パターン]

『mysql> SHOW TABLE STATUS¥G;』

※「¥G」を付けると、1行ごとに改行され、見やすくできます。

取得できる情報
項目名 意味
Name テーブル名
Type テーブル種類
Row_format レコード保存形式(Fixed、Dynamic、Compressed)
Rows レコード数
Avg_row_length レコード平均長
Data_length データファイルの大きさ
Max_data_length データファイルの最大値
Index_length インデックスファイルの大きさ
Data_free 割り当て済みの中で使用されていないバイト数
Auto_increment autoincrement値(次にセットされる値)
Create_time テーブル作成日時
Update_time 最終更新日時
Check_time 最終チェック日時
Create_options 「CREATE TABLE」発行時に使用された拡張オプション
Comment テーブル作成時につけられたコメント

■【3】CREATE TABLE文の取得(SHOW CREATE TABLE)

対象のテーブルを作成するための「CREATE TABLE」文を取得できます。

SHOW CREATE TABLE テーブル名

『mysql> SHOW CREATE TABLE Touken;』

「刀剣(Touken)」テーブルを作成するための「CREATE TABLE」文が表示されます。

「MySQL」参考情報 「第9回MySQLのデータ型」+「第10回MySQLカラムの追加と削除」

「MySQL」参考情報 第9回 MySQLのデータ型

■【1】データ型概要

データ型とは

テーブル定義の際に、各カラムにデータ型を設定する必要があります。

サンプル:「刀剣情報」テーブル定義

CREATE TABLE Touken (
#刀剣ID(NULL禁止、ID自動設定)
id INT(11) NOT NULL AUTO_INCREMENT,
#刀剣名
name VARCHAR(64),
#武将ID 刀剣の持ち主
busho_id INT(11),
#「PRIMARY KEY」を「id」に指定
PRIMARY KEY (id)
);

「INT(11)」、「VARCHAR(64)」の部分でデータ型を設定しています。

テーブルカラムのデータ型確認(DESC)

既存テーブルカラムのデータ型を確認するためには、「DESC」コマンドを使用します。

『mysql> desc Touken;』

Field Type Null
id INT(11) NO
name VARCHAR(64) YES
busho_id INT(11) YES

■【2】主なデータ型

数値型

数値を格納するための型です。格納できる数値の大きさにより、多くの型種類があります。

データ型 最小値 最大値
TYNYINT -128 127
INT -2147483648 2147483647
BIGINT -9223372036854775808 9223372036854775807
文字型

文字を入力するための型です。主に3種類あります。

データ型 最大文字数
CHAR 255
VARCHAR 255
TEXT 65535

「CHAR」と「VARCHAR」の違い
CHAR(5)のカラムに文字列「ABC」を格納した場合
→固定長「ABC△△」 ※△=半角スペース
VARCHAR(5)のカラムに文字列「ABC」を格納した場合
→可変長「ABC」

日付/時刻型

文字を入力するための型です。主に3種類あります。

データ型 内容
DATETIME 日付と時刻
DATE 日付
TIME 時刻

■【3】カラムデータ型の変更(ALTER TABLE)

すでに存在しているテーブルカラムのデータ型を変更できます。

構文

ALTER TABLE テーブル名 MODIFY カラム名 データ型;

サンプル

刀剣テーブル(Touken) の 刀剣名(name)カラム のデータ型が、「VARCHAR(64)」から「VARCHAR(100)」へ変更されます。

注意点

もし、「VARCHAR(64)」から「VARCHAR(5)」へ変更した場合、全レコードの5文字以降の部分は、カットされて消失してしまいます。

対象テーブル内にレコードデータが格納されている状態で、カラムデータ型の変更を行うと、予期せぬことが起こる場合が多々あります。変更する場合には、入念な事前調査が必要です。基本的に、レコードデータ格納後にカラムデータ型を変更するのは、なるべく避けるべきこととされています。

大きなシステムになると、後からデータ型を変更するのは、非常に多くの手間がかかることになります。そのような手間がなるべく発生しないように、最初のテーブル設計時に、「ある程度若干の余裕を持たせておく」「将来拡張用のカラムを持たせておく」などのことが行われることもあります。

「MySQL」参考情報 第10回 MySQLカラムの追加と削除

■【1】カラム追加(ALTER TABLE ~ ADD)

既存のテーブルに対してカラムを追加する場合は、「ALTER TABLE(ADD)」コマンドを使用します。

構文

ALTER TABLE テーブル名 ADD カラム名 型 [FIRST/AFTER カラム名]

サンプルテーブル

CREATE TABLE Touken (
  #刀剣ID(NULL禁止、ID自動設定)
  id INT(11) NOT NULL AUTO_INCREMENT,
  #刀剣名
  name VARCHAR(64),
  #武将ID 刀剣の持ち主
  busho_id INT(11),
  #「PRIMARY KEY」を「id」に指定
  PRIMARY KEY (id)
);

カラム追加例(1) オプションなし

『mysql> ALTER TABLE Touken ADD create_datetime DATETIME;』

「Touken」テーブルの一番最後に、「datetime」型の「create_datetime(作成日時)」カラムが追加されます。

1.id
2.name
3.busho_id
4.create_datetime

カラム追加例(2) 「FIRST」オプション

『mysql> ALTER TABLE Touken ADD create_datetime DATETIME FIRST;』

「FIRST」オプションを付けると、「Touken」テーブルの一番最初にカラムが追加されます。

1.create_datetime
2.id
3.name
4.busho_id

カラム追加例(3) 「AFTER」オプション

『mysql> ALTER TABLE Touken ADD create_datetime DATETIME AFTER name;』

「AFTER」オプションを付けると、「Touken」テーブルの指定したカラム(name)の次にカラムが追加されます。

1.id
2.name
3.create_datetime
4.busho_id

カラム追加例(4) 複数カラム追加

『mysql> ALTER TABLE Touken ADD (test1 INT, test2 INT, test3 INT);』

1.id
2.name
3.busho_id
4.test1
5.test2
6.test3

■【2】カラム削除(ALTER TABLE ~ DROP)

既存のテーブルに対してカラムの削除を行う場合は、「ALTER TABLE(DROP)」コマンドを使用します。

構文

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

カラム削除例(1)

『mysql> ALTER TABLE Touken DROP create_datetime;』

「Touken」テーブルの「create_datetime(作成日時)」カラムが削除されます。

1.id
2.name
3.create_datetime
4.busho_id

 ↓

1.id
2.name
3.busho_id

カラム削除例(2) 複数カラム削除

『mysql> ALTER TABLE Touken DROP test1, DROP test2, DROP test3;』

1.id
2.name
3.busho_id
4.test1
5.test2
6.test3

 ↓

1.id
2.name
3.busho_id

「MySQL」参考情報 「第11回MySQLの文字列結合」+「第12回MySQLの日付フォーマット」

「MySQL」参考情報 第11回 MySQLの文字列結合

■【1】文字列結合

MySQLで文字列結合処理を行う方法について紹介します。

サンプルDBテーブル

刀剣DB(ToukenDB)の刀剣情報(Touken)テーブルに以下のレコードが格納されているとします。

id(刀剣ID) name(刀剣名) name_kana(刀剣名カナ)
1 陸奥守吉行 ムツノカミヨシユキ
2 三日月宗近 ミカヅキムネチカ
3 燭台切光忠 ショクダイキリミツタダ

MySQLの機能を使用して、『刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です』と出力するように文字列結合を行います。

CONCAT

「CONCAT」で文字列を結合できます。

『mysql> SELECT CONCAT(‘刀剣ID(‘, id, ‘)は、’, name, ‘(‘, name_kana, ‘)です’) FROM Touken;』

「刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です」
「刀剣ID(2)は、三日月宗近(ミカヅキムネチカ)です」
「刀剣ID(3)は、燭台切光忠(ショクダイキリミツタダ)です」

CONCAT_WS

「CONCAT_WS」は、指定文字を間に入れて、文字列を結合できます。

第1引数の文字が、間に挟み込まれます。

『mysql> SELECT CONCAT_WS(‘ ’, name, name_kana) FROM Touken;』

「陸奥守吉行 ムツノカミヨシユキ」
「三日月宗近 ミカヅキムネチカ」
「燭台切光忠 ショクダイキリミツタダ」

パイプ(||)

「パイプ(||)」でも、文字列を結合できます。

※SQL_MODEに「PIPES_AS_CONCAT」の設定が必要です。

『mysql> SET SQL_MODE=’PIPES_AS_CONCAT’ ;』
『mysql> SELECT ‘刀剣ID(‘ || id || ‘)は、’ || name || ‘(‘ || name_kana || ‘)です’ FROM Touken;』

「刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です」
「刀剣ID(2)は、三日月宗近(ミカヅキムネチカ)です」
「刀剣ID(3)は、燭台切光忠(ショクダイキリミツタダ)です」

■【2】文字列結合の注意点

CONCAT(CONCAT_WS)使用時に、NULLが含まれる場合

刀剣DB(ToukenDB)の刀剣情報(Touken)テーブルに以下のレコードが格納されているとします。

id(刀剣ID) name(刀剣名) name_kana(刀剣名カナ)
1 陸奥守吉行 ムツノカミヨシユキ
2 NULL ミカヅキムネチカ
3 燭台切光忠 NULL

この状態で、上記と同じように、CONCATで文字列結合を行います。
『mysql> SELECT CONCAT(‘刀剣ID(‘, id, ‘)は、’, name, ‘(‘, name_kana, ‘)です’) FROM Touken;』
「刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です」
「」←NULL
「」←NULL
CONCATでの文字列結合対象の中にNULLが含まれていると、全体がNULLになってしまいます。

「IFNULL」を使用すると、NULLを空白文字に変換することで回避できます。
『mysql> SELECT CONCAT(‘刀剣ID(‘, id, ‘)は、’, IFNULL(name, ‘), ‘(‘, IFNULL(name_kana, ‘), ‘)です’) FROM Touken;』
「刀剣ID(1)は、陸奥守吉行(ムツノカミヨシユキ)です」
「刀剣ID(2)は、(ミカヅキムネチカ)です」
「刀剣ID(3)は、燭台切光忠()です」

「MySQL」参考情報 第12回 MySQLの日付フォーマット

■【1】日付(時刻)フォーマット

テーブル内に格納されている日時カラムデータを出力する際には、さまざまなフォーマットを指定できます。

主なフォーマット
日時単位 形式 出力例 書式
西暦4桁 2016 %Y
西暦2桁 16 %y
ゼロ埋め 05 %m
英名 May %M
ゼロ埋め 07 %d
曜日 英名 Tuesday %W
24時間形式ゼロ埋め 09 %H
ゼロ埋め 09 %i
ゼロ埋め 09 %S
DATE_FORMAT

DATE_FORMATを使用すると、フォーマット指定出力できます。

現時刻を表示する例

『mysql> SELECT DATE_FORMAT(now(),”%Y/%m/%d”);』

 ↓

「2016/05/17」

サンプルテーブル

Touken(刀剣)テーブルに以下のデータが入っているとします。

id(刀剣ID) name(刀剣名) create_date(登録日時)
1 大和守安定 2016/05/17 10:05:12
2 和泉守兼定 2016/05/18 10:15:34
3 鶯丸 2016/05/19 10:30:56
出力例(1) 漢字表記

『[刀剣名]の登録日時は、[登録日時]です。』のように出力します。

『mysql> SELECT CONCAT(name, ‘の登録日時は、’, DATE_FORMAT(create_date,”%Y年%m月%d日 %H時%i分”), ‘です。’) FROM Touken;』

  ↓

「大和守安定の登録日時は、2016年05月17日 10時05分です。」
「和泉守兼定の登録日時は、2016年05月18日 10時15分です。」
「鶯丸の登録日時は、2016年05月19日 10時30分です。」

出力例(2) 英語表記

『[刀剣名]の登録日は、[登録日]です。』のように出力します。

『mysql> SELECT CONCAT(name, ‘の登録日は、’, DATE_FORMAT(create_date,”%d %M %Y”), ‘です。’) FROM Touken;』

  ↓

「大和守安定の登録日は、17 May 2016です。」
「和泉守兼定の登録日は、18 May 2016です。」
「鶯丸の登録日は、19 May 2016です。」

■【2】日付(時刻)関数

MySQLには、日時に関する便利な内部関数がいろいろと用意されています。これらの関数を利用することで、日時データをフォーマット指定出力する以上の処理を行えます。

主な関数
関数名 機能概要
DAYNAME 曜日名(英語)を取得
QUARTER 四半期を取得
DATEDIFF 日付間の日数計算
DATE_ADD 日付加算
DATE_SUB 日付減算
SEC_TO_TIME 秒→時刻に変換
TIME_TO_SEC 時刻→秒に変換

「MySQL」参考情報 「第13回MySQLのパスワード変更」+「第14回MySQLのポート」

「MySQL」参考情報 第13回 MySQLのパスワード変更

■【1】パスワード再設定(SET PASSWORD)

作成済ユーザのパスワードを再設定するためには、「SET PASSWORD」文を使用します。

構文

SET PASSWORD = PASSWORD(”新パスワード”);

SET PASSWORD FOR ユーザ名@ホスト名 = PASSWORD(”新パスワード”);
※「ユーザ名@ホスト名」で指定する必要があります。

実行サンプル(1) ログインしているユーザのパスワードを変更

『mysql> SET PASSWORD = PASSWORD(”makoto”);』

ログインしているユーザのパスワードが「makoto」に変更されます。

実行サンプル(2) 指定ユーザのパスワードを変更

「Shinsen_gumi(新選組)」ホスト(ドメイン)に所属するユーザ「Okita_Souji(沖田総司)」のパスワードを変更する場合です。

『mysql> SET PASSWORD FOR Okita_Souji@Shinsen_gumi = PASSWORD(”kenshi”);』

「Okita_Souji(沖田総司)」のパスワードが「kenshi」に変更されます。

■【2】パスワード文字長/使用できる文字

パスワード文字長

「8文字以上64文字以下」という規定があります。

使用できる文字

半角英字
「abcdefghijklmnopqrstuvwxyz」
「ABCDEFGHIJKLMNOPQRSTUVWXYZ」
※大文字、小文字は区別されます。

半角数字
「0123456789」

半角記号
「! # % & ( ) * + , – . / &#059 < = > ? @ [ ] ^ _ { | } ~」

■【3】パスワード設定注意点

MySQLに関してのみに限ったことではありませんが、パスワードには、情報(データ)を守る大切な役割があります。

機密データを扱う場合には、特に、類推されやすいパスワードが設定されることがないように注意が必要です。

考慮すべきポイント

・ある程度以上の文字列長がある
・辞書に載っているような単純なワードは使用しない
・繰り返しのような規則性がないようにする
・英数字記号が混在している(英字だけではなく数字/記号も入れる)
・他のシステムで使用しているパスワードを使いまわさない
・名前、生年月日、郵便番号、電話番号などを利用しない
・キーボードの並び(qwertyなど)は使用しない
・本人が記憶できること
・他人は類推しにくいこと

「MySQL」参考情報 第14回 MySQLのポート

■【1】「ポート番号」とは

概要

「ポート番号」とは、TCP/IPプロトコルを利用したネットワーク通信のIPアドレスの下に設けられた補助アドレスのことです。

説明

「ポート番号」とは、コンピュータがネットワーク通信に使用するプログラム(アプリケーション)を識別するための番号です。「ポート」と略されます。

ポートは、0から65535までの、65536個の番号で管理されています。主要なプログラム機能については、どの番号のポートを使うのかについて決められています。

IPアドレスを使えば、ネットワーク上のコンピュータを一意に識別することができます。しかし、IPアドレスのみでは、該当コンピュータ上の、どのプログラムに通信パケットを届ければよいのか特定できません。そのため、「IPアドレス」+「ポート番号」のセットとして使用することで、該当コンピュータの該当プログラムに通信パケットを届けることができます。

「IPアドレス」を住所(東京都xxx区xxx町1-2-3 メゾン五穀)として、「ポート番号」を部屋番号(203号室)と例えるなら、住所+部屋番号の組み合わせの情報で、郵便物が配達されるというイメージになります。

代表的なポート番号

・20番/21番=FTP(ファイル転送)
・25番=SMTP(メール送信)
・80番=HTTP(Webブラウザ)
・110番=POP3(メール受信)
・443番=HTTPS(Webブラウザ) など

■【2】MySQLのポート

MySQLも、ポート番号を使用してネットワーク通信を行っています。

デフォルトポート番号

MySQLのデフォルトポート番号は「3306」です。

ポート番号確認方法(1) STATUS

接続しているMySQLのポート番号を確認する方法です。

『mysql> STATUS』

「TCP Port:」として、ポート番号が表示されます。

ポート番号確認方法(2) SHOW VARIABLES

こちらの方法でも、ポート番号を確認できます。

『mysql> SHOW VARIABLES LIKE ‘port’;』

ポート番号を指定してMySQLに接続する方法

ポート番号が「9123」で動作しているMySQLへの接続方法です。

『C:¥MySql¥bin> mysql -u root -D test -p -P 9123』
※「-P 9123」の部分でポート番号を指定します。

MySQLがデフォルトポート番号「3306」で動作している場合、ポート番号指定は不要です。

「MySQL」参考情報 「第15回MySQLの再起動」

「MySQL」参考情報 第15回 MySQLの再起動

MySQLの主な再起動方法について、起動/停止方法と共に、OS別に紹介します。

MySQLバージョン/インストール方法/インストールツールなどにより、パス/デーモン名/サービス名などは異なります。各環境に合わせて読みかえてください。

■【1】Linux環境

コンソール

再起動
[root@web1 ~]# /etc/init.d/mysqld restart

起動
[root@web1 ~]# /etc/init.d/mysqld start

停止
[root@web1 ~]# /etc/init.d/mysqld stop

■【2】Windows環境

コマンドプロンプト netコマンド

Windowsでは、「MySQL停止→起動」の処理により、再起動させます。

管理者としてコマンドプロンプトを起動します。

停止
C:&#165Windows&#165system32>net stop mysql

起動
C:&#165Windows&#165system32>net start mysql

コマンドプロンプト mysqladmin(mysqld)

Windowsでは、「MySQL停止→起動」の処理により、再起動させます。

管理者としてコマンドプロンプトを起動します。

停止
C:&#165> ‘C:&#165Program Files&#165MySQL&#165MySQL Server 5.6&#165bin&#165mysqladmin’ -u root shutdown

起動
C:&#165> ‘C:&#165Program Files&#165MySQL&#165MySQL Server 5.6&#165bin&#165mysqld’

MySQL Notifier GUI

「MySQL Notifier GUI」を使用して、MySQLの起動/停止/再起動することも可能です。

Windows→コントロールパネル→サービス

「コントロールパネル」→「システムとメンテナンス」→「管理ツール」→「サービス」を起動します。

サービス一覧から「MySQL」を選択して、サービスの開始/停止/再起動を行います。

■【3】Mac環境

コンソール

再起動
$ sudo /usr/local/mysql-5.0.96-osx10.5-x86_64/support-files/mysql.server restart

停止
$ sudo /usr/local/mysql-5.0.96-osx10.5-x86_64/support-files/mysql.server stop

起動
$ sudo /usr/local/mysql-5.0.96-osx10.5-x86_64/support-files/mysql.server start

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

この記事のタグ一覧

おすすめの記事

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

経済産業省による「 生成AI 利活用ガイドブック 」は、企業やクリエイター向けに、安心して「生成AI」を利用するための、「指針」「実例」「注意点」を明示しています。「業務効率化」や「新しいアイデア創出」の支援を目的としています。

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

「 2029年問題 」とは、高校でのデジタル教育改革により、新入社員と既存社員間でデジタルスキル格差が拡大する懸念を指します。企業は早急に対応が求められています。この格差は、企業競争力や業務効率にも、影響を及ぼす可能性があります。

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

「 VMWare 」の仮想化技術は、「ITインフラの効率化」に大きく貢献する技術ですが、Broadcomによる買収後のライセンス変更が大きな問題として注目されています。柔軟で慎重な契約見直しが今後の鍵となります。