スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【MySQL】SELECT 1 FROM tableの使いどころ

はじめに



MySQLなどのデータベース技術を学び始めるといろいろなクエリをなげて見たくなりますよね。
僕も初めてMySQLを触り始めたとき(と言ってももう10年以上前の話ですが...)はいろいろ試したみた記憶があります。

例えばこんなクエリ



「え、これってなんの意味があるの?」と思ったことがあるのは鮮明に覚えています。
当然返ってくるのはレコード数分の「1」です。
当時は「ふーん」くらいでスルーしたのですが、今回はこれ関連で気がついたことがあったのでまとめていきます。

Railsを使っていて少し気がつく


Railsを使っているとある条件のレコードがテーブルにあるかどうか調べるために以下の様な処理を実装すると思います。



このときに発行されるクエリは以下の様なクエリ



ここで、すこしだけなるほどとなりました。データ自体はいらないけどあるかないかの確認だけであればこんな使い方もあるのかくらいですね。

実はこんな使い方が便利


さらに時間が経つとこんな場面に遭遇し、使いどころに気が付きます。

あるテーブルの全てのデータを一部のデータだけを変更して、全てコピーしたい

もう少しわかりやすく具体的にすると

ユーザ管理テーブルのgroup_idが2のユーザ全員をgroup_idが8のグループにも所属させたい

さっそくそんなクエリを考えてみると



このクエリのSELECT 8している箇所が今回の結論ですね。

以前なら上記の条件に見合うバッチ処理を書いてしまっていたかもしれませんが、MySQLならクエリ一発でできますね。今回の例では同一テーブルでしたが、別のテーブルでも可能なので臨機応変に使っていければと思います。

SELECT 1 from tableについてはただSELECTするだけではその魅力に気が付きにくいですが、INSERT文やUPDATE文などと組み合わせると使いどころはたくさん見えてくるかもしれません。
スポンサーサイト
テーマ : プログラミング
ジャンル : コンピュータ

Tag:MySQL  Trackback:0 comment:0 

【MySQL】異なるデータベースの同じスキーマのテーブルにデータを移行する簡単な方法

前置き


まず最初にどんなシチュエーションだったのかのご説明を。。。

あるプロダクトの初期段階で「プロダクション環境 = 開発環境」という状況でした。(まぁまぁある状況なのではないでしょうか?)
リリースしてからある程度時間もたち、そろそろ本番のシステムを直接いじるには限界があるなぁと感じた時、「よし、開発環境でも構築しますか」となりcreate databaseしたあと「さて、開発環境用のデータ全く無いけどどうしようか」となった。

そんなシチュエーションです。

データ量が多くなくても開発できる機能であれば問題ないんですが(例えばログイン機能とかデータ量に応じないような単体機能)あるデータの1ヶ月分の推移を表示するようなデータ量がある程度ものをいうような機能を扱うプロダクトの場合、上記のようなデータが空っぽの環境というシチュエーションだと困りますよね。


本題


長い前置きはここまでにして、本題に入っていきます。

こういうシチュエーションのとき、データを移行するようなバッチ処理を実装することもあるかと思いますが、同じMySQLサーバに開発用のデータベースを作る場合はもっと簡単にできます。

dev_databaseという開発環境用のデータベースのtableというテーブルに対して、production_databaeという本番環境用のデータベースのtableというテーブルのデータを移行する場合



こんなコマンドをMySQLに投げれば一発でデータ移行できます。

もちろんある特定の条件のものだけ移行することもできます。



上記の例だとid="aaa"の本番データだけを開発環境に移行することになります。

データ移行用のバッチ処理を実装しようとしてたら一旦冷静になってこの方法を思い出したいと思います。

Tag:MySQL  Trackback:0 comment:0 

【MySQL】月別、日別、時間別にレコードの数を集計する方法

こんばんわ。風邪が長引きすぎてヤバイです。

今回はSQLでdate型のカラムを使って月毎、日毎、時間ごとにレコードの数を集計をする方法を紹介します。

- 月毎

SELECT COUNT(*),time FROM tests GROUP BY DATE_FORMAT(time, '%Y%m');


- 日毎

SELECT COUNT(*),time FROM tests GROUP BY DATE_FORMAT(time, '%Y%m%d');


- 時間毎

SELECT COUNT(*),time FROM tests GROUP BY DATE_FORMAT(time, '%Y%m%d %H');


基本的なことかもですが、大事なので残します。
テーマ : プログラミング
ジャンル : コンピュータ

Tag:MySQL  Trackback:0 comment:0 

【MySQL】MySQLのプロンプトをカスタマイズ

コレは便利なのでメモします。

知らなかったです。

.zshrcに

export MYSQL_PS1='(^[[32m\u^[[00m@^[[33m\h^[[00m) ^[[34m[\d]^[[00m > '

を追記するだけでMySQLのプロンプトがカスタマイズできます。

bashの人は.bashrcに追記になると思います。
テーマ : プログラミング
ジャンル : コンピュータ

Tag:MySQL  Trackback:0 comment:0 

プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。