MySQL リファレンス
MySQLは、リレーショナル(関係)データベース管理システム (RDBMS:relational database management system) です。
SQL を使用してデータベースおよびテーブルなどを作成しデータを記録することができます。デーモン機能を使ってデータベースサーバーとすることも、単独でデータベースとしても利用できます。
MySQL ではデータベースの管理を SQL 文で行います。mysql といったコマンドラインなどのインターフェイスからデータベースを操作します。
ユーザー名はユーザー名とユーザーの接続元の組み合わせ 'username'@'host' です。ユーザー名と接続元との組み合わせでデータベース接続の認証をします。
ユーザーごとにデータベースの操作権限を設定します。操作権限はロールを利用することもできます。
MySQLのインストール
ここではUbuntuにおけるMySQLのインストールからユーザーの設定、MySQLへのログインについて簡単に解説します。
インストールには Ubuntu や CentOS などのディストリビューションからインストールする方法と、MySQL のサイトからソースをダウンロードしインストールする方法があります。
開発環境をディストリビューションを利用して構築するのなら、MySQL もディストリビューションを利用してインストールすることをお勧めします。
MySQLのインストール
管理者権限で、aptによってインストールします。
$ sudo apt install mysql-server
インストールしたままの状態でインターネット上でサーバーとして運用するなら問題があります。スーパーユーザーの設定、アクセスログの記録などのセキュリティー設定や記録ディレクトリの設定などが必要になります。
詳しくはMySQL のインストールを参照して下さい。
ここでは話を簡単にするためにインストール直後の状態であるとして解説します。
MySQLの開発環境のインストール
もし開発環境を構築する必要がある場合には、上記の方法では開発用パッケージは含まれていません。
MySQL を使って開発を行うには libmysqlclient-dev パッケージもインストールする必要があります。
$ sudo apt install mysql-server libmysqlclient-dev
ただし、ネット上でサーバーとして MySQL を運用する場合は開発環境を構築しないようにします。
詳しくは開発用パッケージのインストールについてを参照してください。
起動設定
パッケージインストールによる MySQL はインストールするだけでサーバーとして自動で起動するようになっています。
起動しているかを確認するには systemctl コマンドのオプション status を使用します。
$ systemctl status mysql ● mysql.service - MySQL Community Server Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:> Active: active (running) since Wed 2023-09-06 16:58:54 JST; 16min ago Process: 939 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=ex> Main PID: 1168 (mysqld) Status: "Server is operational" Tasks: 37 (limit: 9344) Memory: 430.4M CPU: 9.258s CGroup: /system.slice/mysql.service └─1168 /usr/sbin/mysqld 9月 06 16:58:48 user-PC systemd[1]: Starting MySQL Community Server... 9月 06 16:58:54 user-PC systemd[1]: Started MySQL Community Server.
上記のように、MySQL サーバーがactive
になっていればログインが可能になります。
MySQL を起動するためには systemctl コマンドのオプション start を使用します。
$ sudo systemctl start mysql
サーバーの起動、再起動に関しては起動設定
を参照してください。
MySQLの操作( mysql コマンドラインツール )
mysql は端末(コマンドプロンプト)から利用できる MySQL 用のインターフェイスです。
OS の端末から mysql コマンド
で MySQL のコマンドラインインターフェイスにログインします。
ただし、インストール直後の初期状態では sudo によってroot
ユーザーとして実行します。
$ sudo mysql ... Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.34-0ubuntu0.22.04.1 (Ubuntu) Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
パスワードはroot
に設定されたパスワードです。
mysql コマンドでデータベース名を指定しない場合はユーザー名と同じデータベース名に接続されます。データベースを指定する時は、-p
オプションに続いてデータベースを指定します。
詳しくはmysql コマンドラインインターフェイス
を参照して下さい。
MySQL からログアウトする場合は以下のコマンドです。
mysql> \q Bye
mysql コマンドラインインターフェイスは多くの場合コマンドラインツールと呼ばれています。
ユーザー(アカウント)の管理
MySQL はインストールのみでのデフォルト設定では root ユーザーとテスト用のユーザーが利用できるようになっています。
新たにユーザーを MySQL に登録し権限を与えるには、mysql においてCREATE USER
を実行します。
まずは root で MySQL にログインします。sudo は root としてコマンドを実行します。
$ sudo mysql ... mysql> CREATE USER 'example'@'localhost' IDENTIFIED BY '5v().B5y4wpT';
上記の例ではパスワードによるログインができるユーザーが作成されます。
この例では、ユーザー名example
、ホストがlocalhost
、パスワードが5v().B5y4wpT
でユーザーが作成されます。
ホスト名はユーザーがどこから接続してよいかを示すものです。MySQL を利用した API といった外部接続を開発する場合には意識する必要があると思います。
標準的には localhost を指定します。ローカルからのユーザーのみの接続を許します。%
はどこからの接続も許します。
ユーザーの追加が成功すればそのユーザーでログインすることができます。
$ mysql -u example
MySQL においてはユーザーと別にロールというものがあります。ロールはユーザーに操作権限が与えらるものです。
ロールは個別に作成することができデータベース操作の権限を設定することができます。ユーザーにロールを設定することで、ユーザーはロールの操作権限を継承します。
詳しくはユーザー(アカウント)、ロール管理
ページを参照してください。
データベースの管理(確認、作成、接続、削除)
データベースの管理としては、既存データベースの一覧で確認、データベースの作成、削除、オーナー管理、ディレクトリ管理があります。ここでは簡単に説明します。
詳しくは、データベースの管理(一覧、作成、接続、削除)を参照して下さい。
データベースの一覧確認
$ sudo mysql ... mysql> SHOW databases;
データベースの作成
まず最初にデータを統括するためのデータベースを作成しなければなりません。データベースにデータを収めるためのテーブルやビュー、トリガといったスクリプトなどが入ります。
mysql にログインまたは SQL コマンドが使える環境で CREATE DATABASE
クエリーを実行します。
$ sudo mysql
...
mysql> CREATE DATABASE dbname;
この場合、root のデータベースとして作成されます。
データベースの接続
データベースの指定には、ログインする際にデータベースを指定する方法と現在操作中のデータベースを切り替える方法があります。
データベースを指定して mysql にログインするには、-p
オプションでデータベース名を指定します。
$ sudo mysql -p db_name ... mysql>
mysql コマンドラインでデータベースを切り替えるには USE クエリーを使用します。
mysql> use other_db; Database changed
現在接続中のデータベースを確認するには SELECT クエリーで databse() 関数を使用します。
mysql> SELECT databse();
詳しくはデータベースに接続
を参照してください。
データベースの削除
データベースを削除するには、データベースの作成権限をもつユーザまたはデータベースオーナーで、以下のコマンドを実行します。
mysql> DROP db_name
詳しくはデータベースの削除
を参照してください。
テーブル定義
テーブルとは、データベースにおいてデータを格納するために用意する表のようなものです。
テーブルの作成
テーブルの作成は以下のように CREATE TABLE クエリーで定義します。
表計算のような行列の概念があり、CREATE TABLE
では列の各カラム(項目)の定義をします。
CREATE TABLE table_name( id SERIAL PRIMARY KEY, name VARCHAR( 30 ) );
データ型には主に以下のものがあります。
データ型
MySQL で扱うデータ型には主に文字列型、数値型、Date 型があります。データ型はカラムのデータタイプ定義にも利用します。
文字列型
| タイプ名 | 概要 |
|---|---|
| CHAR() | 固定長。255 文字まで。引数に文字数を指定。指定数の容量を消費する |
| VARCHAR() | 可変長。255 文字まで。引数に文字数を指定。入るデータ分のみ容量を消費 |
| TINYTEXT | 255 文字まで |
| TEXT | 65,535 文字まで |
| MEDIUMTEXT | 16,777,215 文字まで |
| LONGTEXT | 4,294,967,295 文字まで |
文字数が決まっているような場合は CHAR() または VARCHAR()を。255 文字を超えるような場合や文字数が決まっていない場合は TEXT を使用するとよいでしょう。
CHAR() は固定長で指定された文字数の容量を確保します。VARCHAR() は可変長で保存される文字数によって確保される容量が変わります。多くの場合は VARCHAR() の方が便利でしょう。
数値型
| タイプ名 | 概要 |
|---|---|
| TINYINT | SIGNED、-128 〜 127。UNSIGNED、0 〜 255 |
| SMALLINT | SIGNED、-32,768 〜 32767。UNSIGNED、0 〜 65,535 |
| MEDIUMINT | SIGNED、-8,388,608 〜 8,388,607。UNSIGNED、0 〜 16,777,215 |
| INT | SIGNED、-2,147,483,648 〜 2,147,483,647。UNSIGNED、0 〜 4,294,967,295 |
| BIGINT | SIGNED、-9,223,372,036,854,775,808 〜 9,223,372,036,854,775,807。UNSIGNED、0 〜 18,446,744,073,709,551,615 |
| FLOAT() | -3.402823466E+38 〜 -1.175494351E-38。1.175494351E-38 〜 3.402823466E+38 |
| DOUBLE() | -1.7976931348623157E+308 〜 -2.2250738585072014E-308。2.2250738585072014E-308 〜 1.7976931348623157E+308 |
| SERIAL | 自動増分。1 ~ 4,294,000,000 |
日付型
| タイプ名 | 概要 |
|---|---|
| DATE | YYYY-MM-DD。1000-01-01 〜 9999-12-31 |
| DATETIME | YYYY-MM-DD HH:MI:SS。1000-01-01 00:00:00 〜 9999-12-31 23:59:59 |
| TIMESTAMP | YYYY-MM-DD HH:MI:SS。1970-01-01 00:00:00 〜 2037-12-31 23:59:59 |
| YEAR | YYYY。1901 〜 2155 |
| TIME | HH:MI:SS。-838:59:59 〜 838:59:59 |
テーブル一覧
データベース内のテーブルを確認するには SHOW TABLES クエリーを実行します。FULL オプションを付けてテーブルの種類も確認できた方がよいでしょう。
mysql=> SHOW FULL TABLES;
テーブルの内容確認
テーブルの内容を確認するには DESC クエリーを実行します。
mysql=> DESC table_name;
詳細まで確認するには以下の SHOW クエリーを実行します。
mysql=> SHOW CREATE TABLE table_name;
テーブルの操作に関して詳しくはテーブル
を参照してください。
テーブルデータ
テーブルにデータを作成するには INSERT クエリーをテーブルを指定して実行します。
データの閲覧は SELECT、更新は UPDATE、削除には DELETE クエリーを実行します。
データの新規作成
テーブルへデータを新規作成するには INSERT 文を作成し実行します。例えば以下のように作成ます。
INSERT INTO table_name ( name ) VALUES ( 'test' );
データの閲覧
テーブルに保存されたデータを閲覧するには SELECT 文を実行します。
SELECT * FROM table_name;
ここでは*
を指定し、すべてのカラムのデータを取得します。
データの更新
データを更新するには UPDATE 文を実行します。WHERE 句を使い更新する行を指定するようにします。
行を指定しないと全てのデータを更新してしまいます。
UPDATE table_name SET name = 'update test' WHERE id = 1;
ここでは id = 1 を指定し、1つの行のみを更新の対象にしています。
データの削除
保存されたデータを削除するには DELETE 文を実行します。UPDATE 文と同じようにWHERE 句を使い更新する行を指定するようにします。
行を指定しないと全てのデータを削除してしまいます。
DELETE FROM table_name WHERE id = 1;
ここでは id = 1 を指定し、1つの行のみを削除します。
SQLファイルの読み込み
SQLファイルを読み込むには、MySQLのコマンドラインから読み込み、実行するには SOURCE クエリーを使用します。
mysql> SOURCE example.sql
読み込む sql ファイルはカレントディレクトリからファイル名で辿ります。読み込み先のデータベースは確認するようにします。
組み込み関数(ビルトイン関数)
MySQL では組み込み関数(ビルトイン関数)と呼ばれる現在の日時や数値計算など便利な関数が用意されています。
mysql> SELECT now();
例えば以下のような余りを返す、数値に関する組み込み関数もあります。
mysql> SELECT MOD( 15, 2 );
