Database JUNKY

MySQL,MariaDBを中心としたブログです

SQL

SQLで変数を使う

他のDBはよくしらないですが、MySQL系のSQLをSQL文中にユーザー変数を含めることができます。この手法を理解すると、洗練されたSQLを記述することができます。 SET文を用いる方法と、SELECT ~ INTO を用いる2種類の方法があります Anker PowerCore 5000 (5…

SQLでshellを作成するサンプル?

とあるテーブルの内容を元にして、SQLで、shellファイルをつくって実行しちゃおうってのを無理やりつくってみました。 テーブル定義 CREATE TABLE `files` ( `id` int(11) NOT NULL DEFAULT '0', `file_name` varchar(100) DEFAULT NULL ) ENGINE=InnoDB DEF…

MySQL 意外と簡単!グループ連番を検索結果に付番する方法!

特に連番がないテーブルに意図的に連番を振りたいってこと、日々の運用で結構あったりませんか?以外と簡単にSQLでそれを実現できます!!! サンプルデータについて 例えば以下のようなテーブルがあり、これを題材にやってみたいと思います mysql> DESC log…

スゴ技! MySQLでレコードの異なる日時の差(引き算)を求めるSQL

やってみたら、かなり私には、高度すぎて死にかけました。 やりたいことは、 MySQLで同列の異なる行と行の引き算をSQLで書くとこうなるってことです。 やってみたいことを文書で表すと、ユーザーのログインは前回のアクセスからどれくらいの感覚でログインし…

なければINSERT、あればUPDATE(ON DUPLICATE KEY UPDATE)

レコードがなければINSERT、あればUPDATEなどどいう超便利なSQL構文があります ON DUPLICATE KEY UPDATE オプションがそれなのですが、 結構便利です、今回 MariaDBで試しておりますが、MySQLでもおそらく同様にいけると思います。

MySQL 集計結果を横倒しで出すSQL

かなり無理やりだけど、集計の結果を横倒しで表示するサンプルSQLです。 かなり、無理やりですが笑 こんなデータを。。。 +------------+------+ | wdate | cnt | +------------+------+ | 2014-01-21 | 1 | | 2014-01-22 | 20 | | 2014-01-23 | 10 | | 2014…

MySQL 日時表記を数字のみで表す

現在日時を、YYYY-MM-DD の形式で表示されることがもっとも普通なのですが笑、時と場合によって、日付を8桁の数字のみで表したいとかありますよね。そんな時は、DATE_FORMATでやっちゃえばいいんです。

MySQL日付の範囲内でのレコード重複チェックをSQLで実現する

日付(From - To )にて、レコードが重複(かぶっている)ものを抽出するSQLのサンプルです。うーん、なんて言えばいいのか 日付期間の重複チェック と言えばいいのか、日時の範囲チェックというべきか・・・なかなか難易度が高かったので、メモを残しておきま…

乱射注意!!!MySQL TRIGGER(トリガー)は結構使える!!

使いみちによっては、すごく便利なトリガーについて説明します。使いみちと書いたのは、なんでもかんでもトリガーにもりもりしちゃうと対象テーブルのパフォーマンスに影響出ちゃうよという乱射状態になってしまいますので注意って感じです トリガーとは Tri…

MySQL,MariaDBでタグ機能(TAG)を実現する(TOXI法)④SQL応用

もう、設計としては完了しているので、作成されたデータを元に応用SQLを考えてみます。 もう特に考える部分はないので、あとは好きな角度からSQLを発行するだけでいいと思います。 TANITA 【SDカード搭載】 & 【乗った人をピタリと当てる「乗るピタ機能」搭…

MySQL,MariaDBでタグ機能(TAG)を実現する(TOXI法)③タグマップデータ投入

前回 hit.hateblo.jp にて、タグデータを投入する説明はしましたが、肝心のDIARYの中での紐付けについては書いていませんでした。 前回の記事を含め、タグのマッピングの登録方法についても記載していきます。もちろんストアドプロシージャベースでの話です

MySQL,MariaDBでタグ機能(TAG)を実現する(TOXI法)②タグデータ挿入

前回の、TOXI法による、MySQLのタグのしくみを説明しました。 hit.hateblo.jp 正規化として、これ以上ないくらいの完璧さなのですが、実際このタグ、複数のユーザーが任意に設定できるという、いわゆるソーシャルタグの場合はどうでしょう? 正規化とはうら…

MySQL,MariaDBでタグ機能(TAG)を実現する(TOXI法)①タグ関連のスキーマ設計

MySQLでタグのしくみを作る? MySQLでタグの仕組みを作る場合は、どのような設計をすればいいのでしょうか? タグの設計にはいくつかの種類があり Licious:コンテンツ系のデーブル1つの中にタグフィールドを持たせる方法 Scuttle: コンテンツ系とタグ系のテ…

オートナンバーをランダムユニークな値に変換する

MySQL(MariaDB)のオートナンバー型ってもちろん便利なのですが、数年システムを運用していくと、こんな課題が出てきてしまいます。 とあるWEBシステムで、規則性のあるデータを見つけてしまう。ちなみに、これ、セキュリティの話ではなく、あくまでも、外…

mysqlのconcatを||(パイプ)で対応できるようにしよう

文字列結合にいちいちconcatなんていう関数を使うのはめんどくさい、且つわけがわからなくなるので、パイプ(||)でconcatと同様の操作がおこなえるように変更するtipsです UBTECH Jimu Robot Explorer Kitプログラミング 学習ロボット出版社/メーカー: UBTECH…

MySQLのrootアカウントが消えてしまった!!そんなときの復旧手順

何が起きたのかさっぱりわからないのですが、MySQL(MariaDBのパスワードがrootから何から消えてしまった。。 なぜ消えたのかは置いておいて、とりあえず、現状復帰しないことには、だーれも接続できない状態が続いてしまう・・これはまずい。 そんな場合のro…

DBが遅い!そんな時・・MySQL スロークエリーからの索引チューニング〜 mysqldumpslow

MySQL/MariaDBでのパフォーマンス低下一番の理由がスロークエリーです。MySQLでサービスを展開しているデータベースやさんって、例外なくここをきにするのではないかな?と思います。そしてスロークエリーが発生した場合の一番の対策は、適切な索引(INDEX)…

画像情報テーブルの作成 ~ソーシャルサービス系のDB構築

ソーシャルサービスにおいて、一番大切な部分はサービスの軸はなんなのか?です。instagramだったら写真ですよね。youtubeだったら、動画ですよね?facebookとtwitterだったら・・なんでしょう(笑) すべてのサービスにおいて、大切なのはコンセプトです \…

ソーシャルサービス系のデータベースを構築する

私、データベースエンジニアです データベースエンジニアとは 仕事を進める上で、多数の別部門との協力が必須となるデータベースエンジニアには、高いコミュニケーション能力が求められます。また、物事を論理的に考えることが好きな方もデータベースエンジ…

いいね(LIKE)機能を実装する~ソーシャルサービス系のDBを構築する

いいねってなに? FACEBOOKですと、いいね、 Twitterだと♥のあれです。エンゲージメント率を高めるばかりではなく、記事の拡散にも効果を発揮しますよね。また、サービス運営者視点で話すと、話題が見つけやすくなりますよね。 ってなわけで、今度はいいね。…

ソーシャルサービス系のデータベースを構築する~ ユーザー情報編

ユーザー情報テーブルを作成してみよう 今回、どんなサービス、およびシステムでもありそうなユーザーマスタテーブルを設計/構築してみたいと思います ただ、テーブルを作る、登録しただけですと、ちょっとつまらないので今回は、ダイナミックカラムと、PASS…

フォロー/フォロワーの構築 ~ソーシャル系のDBを構築する

フォロー/フォロワーのテーブル設計 ソーシャルネットワーク系のデータベースでフォロー/フォロワーってどんなしくみで設計しているの?なんていうのを中心にまとめてみました NURO光キャンペーン ネットのみでも必ず3万円が貰える! 有効な暇つぶしの方法と…

MySQL スキーマ内に存在する全ての索引を一括で抽出するSQL

mysql でテーブルの索引がどう設定されているのか知りたいときがあると思うのですが。その場合、 mysql> show index from TABLE_NAME; で確認できます でわ、スキーマ内の全てのテーブルの索引を抜き出したい場合はどうするか? というわけでinformation_sch…

GROUP_CONCATを利用して、列名を列挙したSQLを生成する

MYSQLには、GROUP_CONCATというすばらしい関数があるのですが、ような複数のレコードのとある値を、一行にまとめるということができる関数で、そりゃーもう便利です!!今回はこのGROUP_CONCATを利用して、SQLからSQLを生成するなんていうサンプルを作ってみ…

SQLだけで、メールアドレスの@以前の文字を置き換える

SQLって奥が深いです。SQLだけで、ほぼデータの加工が行えます。 今回はメールアドレスをマスキングかけるというのを試してみたいと思います Lenovo タブレット 2in1 パソコン Miix 3 80HV0055JP/Microsoft Office Home & Business 2013搭載/2GB/64GB/Window…

MariaDB/NoSQL Dynamic Columns の活用

以前、ここに hit.hateblo.jp 掲載して、結構満足していたのですが、今更になって、MariaDBにその機能が実装されていたという、なんともお恥ずかしい話しになります MariaDBにDynamic Columnsというものがありまして、これがまさしくRDBMSとNoSQLのハイブリ…

MySQLをKVSのように使う

RDBは、使いやすい!速い!なのですが、カラムの拡張には、どの製品であろうと弱い。。24時間365日稼働しているサービスでカラム追加なんてなんてしようものなら、もうとんでもなくめんどくさいことになる。。 というわけで、カラム拡張が容易なテーブル構成…

MySQL 登録されている索引の一覧を出力する

MySQLにて、登録されている索引を確認する方法としては mysql > show index from TABLE_NAME; で確認できます。しかしこれですと全てのスキーマ内に存在する全ての索引を確認することができません では、索引が設定されているかいないかわからないテーブルの…

SQLで文字の一部分を置き換えて表示する方法

あくまでも例ですが・・ よくテストデータを作成する時に、 ドメインは残しておきたい でも@より前のアカウントはマスキングしたい なんていうリクエスト結構ないですかね?昔、ガラケーなのではあったのですが、今そんなにそんなリクエストないのかな? な…