dockerを使って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;
コメント