kakakakakku blog

Weekly Tech Blog: Keep on Learning!

MySQL

多くのデータベースに対応したマイグレーションツール migrate を MySQL で試した

データベースのマイグレーションを行うツール migrate を試した.migrate は MySQL / MariaDB / PostgreSQL / Amazon Redshift / MongoDB / Cassandra など,多くのデータベースに対応している.GitHub リポジトリを見るともっと多くのデータベースに対応し…

MySQL のサンプルデータセット "world" データベース と "world_x" データベースの差とは?

MySQL 関連の検証をしたり,データベース未経験者に SQL を教えたりするときに,よく MySQL 公式の「world データベース」を使っている.「国と都市と言語」を対象にしたデータセットとなり,とても使いやすいと思う.例えば「Redash ハンズオン」でも使って…

MySQL で JSON 型からクオートを除去した文字列を取得するなら ->> を使う

MySQL(5.7 以降)で「JSON 型」のカラムから指定したキーを取得する場合 JSON_EXTRACT() を使う.もしくは JSON_EXTRACT() と同じ動作をする -> オペレータを使うこともできる.以下に members テーブルの info カラムから name キーを取得する SQL を載せ…

知っておくと便利な MySQL の GROUP_CONCAT 関数

最近 MySQL で SQL の相談を受けたときに「もしかしたら GROUP_CONCAT が使えるかも?」というアドバイスをした.GROUP BY だけではなく GROUP_CONCAT も知っておくと便利なので,今回は GROUP_CONCAT の紹介記事を書く. GROUP_CONCAT とは? GROUP_CONCAT …

事前にデータ投入をした MySQL Docker イメージを作る場合は /docker-entrypoint-initdb.d を活用すると便利

事前にデータ投入をした MySQL Docker イメージが必要になり,最初は「Dockerfile で頑張る感じかなぁ...」なんて考えながら調査をしていたら,公式の MySQL Docker イメージに「カスタムスクリプトを実行する機能」が用意されていることを知って,全て解決…

mysqldiff を使って継続的に MySQL のデータベーススキーマの差分をチェックする

最近,環境ごとのデータベーススキーマの差分をチェックする機会があった.プロダクション環境とステージング環境ならまだしも,開発環境だと検証のために追加したインデックスがそのままになっていたり,開発が途中で止まってしまって日の目を見ることがな…

Docker で MySQL 5.7 を動かして新機能 JSON 型を試してみた

MySQL 5.7 の新機能を見たらあまりにも多くて驚いたけど,簡単に動かしてみようと思って,今回は新たに追加された JSON 型を試してみた. Complete list of new features in MySQL 5.7 Docker で MySQL 5.7 を動かす Docker Hub に書いてある手順の通りにコ…

migration_comments + annotate で MySQL のカラムコメントを管理する

今まで MySQL のカラムにコメントを付ける習慣がなかったんだけど,いざ新メンバーとして既存コードを読んで理解する立場になってみると,ちゃんと書かれたコメントのおかげでスキーマを理解しやすかったし,メンバー間の認識相違も生まれないし,重要だなと…

mycli が便利過ぎる

最近流行っているという噂の mycli を使ってみた.快適! MySQL に関してはあまり GUI を使う習慣がなくて,今までも MySQL CLI を使ってたので,mycli に完全に切り替えた. mycli まぁ複数のテーブルを見ながら試行錯誤するときは Sequel Pro を使うと思う…

standalone-migrations でデータベースをマイグレーション管理にする

非マイグレーション管理で,さらに Rails の規約に則ってないような,サービス稼働中の既存データベースをこれからマイグレーション管理にする方法を考えていて,standalone-migrations っていう Gem が良さそうだったので試してみた.基本的には GitHub の …

MySQL で kill したプロセスが Killed のまま残ってしまう

MySQL でちょっと重めのデータをロードしたら全然返ってこなくなったので,いったん止めて,改めてクエリを投げたら以下のエラーが出た. ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction show processlist して,ゴーストにな…

MySQL WorkbenchでSQLに勝手にLIMITが付く

MySQL Workbench で SQL 投げたら,結果が期待通りじゃなくて,調べてみたら SQL に勝手に LIMIT 0, 1000 って付いてた! そういうデフォルト設定みたいで,Preference で Limit Rows のチェックを外してしえばOK!ドキュメントにもちゃんと書いてあった. M…