[docker]MySQLを使いたい

テクノロジー・ガジェット

dockerを使ってMySQLを使用する方法をメモに残します

MySQLを使う流れ

MySQLを使う基本の流れは接続→命令→切断

MySQLに接続する

MySQLに接続してみる

MySQLに命令する

MySQLに命令してみる

MySQLとの接続を切断する

MySQLとの接続を切断してみる

MySQLに接続してみる

MySQLと接続するにはmysqlコマンドを使用する

クライアントからMySQLサーバーに接続する

  • -h : host ホスト名
  • -u : user ユーザー名
  • -D : database データベース名。大文字なことに注意
  • -p : password パスワード。値を指定しないとターミナルからパスワード入力を求められ、入力するときに非表示なため、セキュア

appコンテナからdbコンテナのmysqlに接続する

dockerコンテナを起動する

docker-compose up -d

dockerを使ってMySQLに接続する

以下のコードはすでにあるデータベースに接続

docker-compose exec app mysql -h <ホスト名> -u <ユーザー名> -D <データベース名> -p

-pの後にパスワードを記述することもできるが、そのままエンター。

エンター後にパスワードを求められるので安全。コマンド履歴にパスワードが残らない。

以下、コマンドの例

docker-compose exec app mysql -h db -u book_log -D book_log -p

MySQLに命令してみる

テーブルを作成する

テーブルはCREATE TABLE文で作成する

CREATE TABLE [IF NOT EXISTS] <テーブル名>(
  <列名1> <データ型> <制約>,
  <列名2> <データ型> <制約>,
  ...
)<テーブルオプション>;

以下、会社情報のテーブルを作成の例

CREATE TABLE companies(
  id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
  name VARCHAR(255),
  founder VARCHAR(255),
  establishment_date DATE,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) DEFAULT CHARACTER SET=utf8mb4;
companiesテーブルを作成(
  id 整数型 自動増値 NULL不可 主キー,
  name 可変長文字列型(255文字),
  founder 可変長文字列型(255文字),
  establishment_date 日時型,
  created_at タイムスタンプ型 NULL不可 初期値 現在タイムスタンプ
) 初期値 文字型 set=日本語文字コード;

開発中の場合、既にcompaniesテーブルがある場合、削除してからテーブルを再作成することがあるので上記の頭に1行追加する。

DROP TABLE IF EXISTS companies; --companiesテーブルが存在していたら削除

CREATE TABLE companies(
  id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
  name VARCHAR(255),
  founder VARCHAR(255),
  establishment_date DATE,
  created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
) DEFAULT CHARACTER SET=utf8mb4;

CREATE TABLEの命名ルール

データベース名、テーブル名、列名に使える文字

半角英数字、アンダーバー

最初の文字は半角アルファベット
名前の重複は不可

1つのデータベースに2つの同じテーブル名は不可

1つのテーブルに2つの同じ列名は不可

ターミナルでコマンドを実行する

上記コマンドをMySQLにログインした状態でコピペしてエンター。Query OKと表示が出れば成功

以下のコマンドでうまくいったか確認する

SHOW TABLES;

作成済みのテーブル一覧が表示される。続いてカラム(列名)が作成されたか確認する

SHOW COLUMNS FROM companies;

作成されたカラム(列名)が確認できる。

ファイルからSQL文を実行する

テキストファイルにSQL文を保存してターミナルで実行

mysql < text_file

docker上のMySQLに対して実行するなら

docker-compose exec app /bin/bash
mysql -h <ホスト名> -u <ユーザー名> -D <データベース名> -p < text_file

コマンド例

docker-compose exec app /bin/bash
mysql -h db -u book_log -D book_log -p < tmp/initialize_companies_table.sql

テーブルを削除するコード

DROP TABLE文を使用してテーブルを削除できる。

DROP TABLE文は1つ以上のテーブルを削除できる。

DROP [TEMPORARY] TABLE [IF EXISTS]
    tbl_name [, tbl_name] ...
    [RESTRICT | CASCADE]

companiesテーブルを削除するなら

DROP TABLE companies;

Query OKと出力されれば成功、確認の為、SHOW TABLES ; コマンドで確認する

テーブルにデータを登録してみる

SQLのINSERT文でデータを追加する。以下、構文:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name,...)] 
    [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

以下、使用例:

INSERT INTO companies(
  name,
  establishment_date,
  founder
)VALUES(
  'mercari inc',
  '2013-02-01',
  'Shintaro Yamada'
);

日本語が含まれているINSERT文をターミナルで直接実行すると文字化けするので注意。

ターミナルでINSERT文が実行されたか確認する

SELECT * FROM companies;

または、

SELECT * FROM companies\G

テーブルからデータを取得する

MySQLとの接続を切断してみる

MySQLとのコネクションを切断する。最後に切断するのを忘れないようにする。

以下、ターミナルにて実行

quit;

コメント