タグ

SQLに関するthreeMonthsのブックマーク (26)

  • Vimから任意のデータベースを操作 - mfumiの日記

    ふとSQLを勉強しようと思ったんですが、ちまちまコマンドラインのクライアントから入力するのはきついので、Vimから操作できないのかなーとか妄想してたら普通にありました。 dbext.vim - Provides database access to many DBMS (Oracle, Sybase, Microsoft, MySQL, DBI,..) : vim online 使い方 初期設定 まずはじめに使用するSQL等の設定をする必要があります。 :DBPromptForBufferParameters か、<Leader>sbp(普通<Leader>は\)をすると対話形式で設定ができます。以下の項目などを設定します。 ・使用するSQLの種類(MySQLとかSQLiteとか) ・ユーザー名 ・パスワード ・サーバーのホスト名 ・使用するデータベース名 他にももっといろいろと設定できる

    Vimから任意のデータベースを操作 - mfumiの日記
  • QuickRunからSQLを実行するための設定(MySQL用)

    この記事は、Vim Advent Calendar 2011 の29日目の記事です。 Webアプリの開発をしていると、少し複雑なSQLを書かなきゃならないとか、開発用のデータを入れ替えたいなどSQLを実行したいと思うシチュエーションが多々あります。そんなとき、皆さんはどのような方法でSQLを実行してるでしょうか?シェルからコマンドを叩いてみたりphpMyAdminのようなWebベースのDBMSを使ったりといくつか方法があると思います。 私はシェルからコマンドを起動することが多いのですが、ほんの一瞬であってもVimから離れてシェルに戻るのが苦痛です。また、DBMSを使う場合でもVimから離れてSQLの編集を行わなければならなかったり、VimSQLファイルを編集してからそれをDBMSにもっていったりと何かと煩雑な作業が入るのが辛いです。 そんな私のようなVimmerのためにVim内からSQL

  • SQLパフォーマンス問題調査でEXPLAIN PLAN、SQLトレースは(ほとんど)使わない « WR blog

    December 2014 (1) February 2014 (1) January 2014 (1) September 2012 (1) April 2012 (1) March 2012 (2) October 2011 (1) June 2011 (5) May 2011 (1) April 2011 (1) March 2011 (1) February 2011 (1) January 2011 (1) December 2010 (1) September 2009 (1) April 2009 (1) March 2009 (1) January 2009 (3) November 2008 (2) October 2008 (1) December 2005 (2) October 2005 (2) September 2005 (2) August 2005 (7)

  • Ring

    Ringとは、リクルートグループ会社従業員を対象にした新規事業提案制度です。 『ゼクシィ』『R25』『スタディサプリ』など数多くの事業を生み出してきた新規事業制度は、 1982年に「RING」としてスタートし、1990年「New RING」と改定、そして2018年「Ring」にリニューアルしました。 リクルートグループの従業員は誰でも自由に参加することができ、 テーマはリクルートの既存領域に限らず、ありとあらゆる領域が対象です。 リクルートにとって、Ringとは「新しい価値の創造」というグループ経営理念を体現する場であり、 従業員が自分の意思で新規事業を提案・実現できる機会です。 Ringフロー その後の事業開発手法 Ringを通過した案件は、事業化を検討する権利を得て、事業開発を行います。 さまざまな事業開発の手法がありますが、例えば既存領域での事業開発の場合は、 担当事業会社内で予算や

  • ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)

    補足 この記事は旧徳丸浩の日記からの転載です。元URL、アーカイブはてなブックマーク1、はてなブックマーク2。 備忘のため転載いたしますが、この記事は2010年7月1日に公開されたもので、当時の徳丸の考えを示すものを、基的に内容を変更せずにそのまま転載するものです。 補足終わり PHPのデータベース・アクセス・ライブラリPDOは、DB接続時の文字エンコーディング指定ができないため、文字エンコーディングの選択によっては、プレースホルダを使っていてもSQLインジェクション脆弱性が発生します。 追記(2011/06/19) ここに来て急にブクマが追加されはじめていますが、このエントリを書いてから状況が改善しています。PHP5.3.6(2011/03/17)にて、PDOでもデータベース接続の文字エンコーディングを指定できるようになりました。この版で、UNIX版のPHPでは解決しましたが、Win

    ぼくがPDOを採用しなかったわけ(Shift_JISによるSQLインジェクション)
  • INとEXISTSの違い - SQLer 生島勘富 のブログ

    INとEXISTSは違います。 BETWEENと、不等号の組合わせなど、等価になる記述法はあるのですけれど、INとEXISTSは基的に同じ結果を返すことが可能ですが、意味は違います。 この違いが分かるにはインデックスを理解する必要がありますので、まずは、インデックスのイメージをつけてください。 まずはイメージ ここでも、まずはイメージで考えましょうね。 あなたは先輩の結婚式の司会を頼まれましたとします。イロイロと準備がありますが、余興で歌を歌う人がいるとき、予めカラオケの番号を調べておくでしょう。 事の間のBGMについては、ラブソングの入ったiPodをつないでランダムで流すことにしましょう。しかし、新郎新婦にとって(過去の恋愛経験上)都合の悪い曲があり、チェックしてはじいておくことにしました(なかなか、そつがない司会ですな)。 これらの処理をSQLにするならば……。 ■カラオケの番号を

    INとEXISTSの違い - SQLer 生島勘富 のブログ
  • NoSQLとSQLについて - SQLer 生島勘富 のブログ

    NoSQL(Not Only SQL)とは、SQLを使わないKVS(Key Value Store)などを指しますが、最近流行のキーワードです。今日はNoSQLについて。 SQL英語であり仕様書である SQL英語であり仕様書である。と書いてきました。 SQLは、プログラム(アルゴリズム)を組むことができない文系の事務員が、英語的記述で書けば結果が得られるというものです。SQL文中にアルゴリズムは存在しません。 例えば、次のようなテーブルをご用意ください。 TEST_TABLE ID NUMBER 主キー NAME VARCHAR(20) IDに1から1,000,000 NAME 名前のテストデータ この100万件のデータが入ったこのテーブルを 1) SELECT * FROM TEST_TABLE WHERE ID = 1 2) SELECT * FROM TEST_TABLE WHE

    NoSQLとSQLについて - SQLer 生島勘富 のブログ
  • 情報処理推進機構:情報セキュリティ:脆弱性対策 :「安全なSQLの呼び出し方」を公開

    IPA(独立行政法人情報処理推進機構、理事長:西垣 浩司)は、ウェブサイトを狙ったSQL(*1)インジェクション攻撃(*2)が継続していることから、ウェブアプリケーション(*3)の安全な実装方法を解説した資料「安全なSQLの呼び出し方」を2010年3月18日(木)からIPAのウェブサイトで公開しました。 URL:http://www.ipa.go.jp/security/vuln/websecurity.html 近年、ウェブサイトを狙った攻撃が継続しています。攻撃の実例として、IPAが無償で公開している「SQLインジェクション検出ツールiLogScanner(*4)」で、「脆弱性対策情報データベースJVN iPedia(*5)」のアクセスログを解析した事例を図1に示します。 図1を見ると、2008年頃から急増しているSQLインジェクション攻撃が全体の45%、ウェブサーバのパスワードファイ

  • 第8回 SQLにおける論理演算~なぜ真理を隠すのか~ (3)HAVING句で論理演算を行おう | gihyo.jp

    ある人材紹介会社に登録されている就業希望者と、その仕事のスキルの組み合わせを表現したものです。当は、スキルコードも「01102」とかコードで表すのがよりリアリティがありますが、わかりやすさのためスキルの名前をそのまま使うことにします。このテーブルによれば、たとえば100番の人は会計、在庫整理、製造という3つの分野の技術を持っており、300番の人は製造のみの技術を持つ、ということになります。 さて、この会社にはいつもひっきりなしにクライアント企業から人材についての問い合わせが入ります。みなさん、この会社の対応オペレータになったつもりで、クライアントからの問い合わせ条件に合致する人材がいるかどうか、検索してみてください。 ①クライアントAからの問い合わせ 次のような条件であるとします。 条件:「製造」スキルを持っている人材 これは簡単ですね。スキルが1つだけであれば、WHERE句で条件を記述

    第8回 SQLにおける論理演算~なぜ真理を隠すのか~ (3)HAVING句で論理演算を行おう | gihyo.jp
    threeMonths
    threeMonths 2010/02/15
    having句を使って
  • Java: PreparedStatement で like を扱う時の注意点 - toyfish.blog

    JDBC には PreparedStatement クラスが用意されていて、SQL 文の一部をパラメータ化することができる。 パラメータ部分のエスケープ処理は JDBC ドライバが行ってくれるので、SQL インジェクション対策として最近では必須になりつつあるこのクラス。しかし、like 演算子を使う場合は、ちょっと注意が必要だ。 Lv 1 ネットで検索してみると、失敗例としてひっかかってくるのがこのパターン。 Statement stmt = conn.prepareStatement("select * from items where name like '?%'"); stmt.setString(1, "hatena"); ResultSet rs = stmt.executeQuery();name が "hatena" で始まる行を選択しようとしているわけだけど、これだと例外が

    Java: PreparedStatement で like を扱う時の注意点 - toyfish.blog
    threeMonths
    threeMonths 2010/01/25
    アンスコや%をエスケープするには。
  • SQLインジェクションとは何か?その正体とクラッキング対策。

    世間では、今Gumblar祭りが勃発中であり、SQLインジェクションがニュースに出てくることは少なくなったが、だからと言ってSQLインジェクションの脅威がなくなったわけではない。SQLインジェクションはGumblarを仕掛ける手段としても利用されることがあり、Webアプリケーションを提供する全ての人にとって、対策を講じなければいけない驚異であることに変わりはない。SQLインジェクションという攻撃手法が認識され、大いに悪用されているにも係わらず、その質に迫って解説している記事は少ないように思う。従来のWeb屋だけでなく、今やアプリケーション開発の主戦場はWebであると言っても過言ではなく、そういう意味ではSQLインジェクションについて理解することは、全てのプログラマにとっての嗜みであると言えるだろう。 というわけで、今日は改めてSQLインジェクションについて語ってみようと思う。 SQLイン

    SQLインジェクションとは何か?その正体とクラッキング対策。
    threeMonths
    threeMonths 2010/01/15
    "セカンドオーダーインジェクション"/こういう記事は僕のような初心者にはありがたい
  • SQLに依存することの危険性 ー 単体DBサーバでは終わらない時代の考え方 | 独り言v6

    ベンチャー社長で技術者で:ベンチャー社長で技術者で: オブジェクト指向言語で処理したら保守性が悪い!. というのを目にした。要するに「OO言語+RDBな組み合わせ」において、O\Rマッピングに頼らずにちゃんとSQLとストアドを書いた方がいい、と言うことである。 L.starは元々Java屋でそれからSQLに移ったので、未だに自分が両方をバックグラウンドに持つ人間だと思っている。O/Rマッピングのイ ンピーダンスミスマッチを解決する簡単な方法が実は無い、と言うぐらいには両方を理解している。だからこそ言いたいが、この文章、特定のDBが中央に鎮座していて、それがすべての中心になるような業務システムにおいては完全に正しい。ただし、元々そう言うシステムを念頭に置いて書かれた文章であるので、その点はちゃんと考えるべきだ。O/Rマッピングに頼り切って、SQLをきっちり書かない、ということをすると性能が出

  • 例外に依存するロジックは駄目ですよ

    Ognacの雑感 木漏れ日々 目次 ホーム 連絡をする RSS Login Blog 利用状況 投稿数 - 1487 記事 - 0 コメント - 45604 トラックバック - 143 書庫 2014年5月 (6) 2014年4月 (13) 2014年3月 (14) 2014年2月 (12) 2014年1月 (12) 2013年12月 (13) 2013年11月 (13) 2013年10月 (11) 2013年9月 (13) 2013年8月 (14) 2013年7月 (13) 2013年6月 (14) 2013年5月 (15) 2013年4月 (13) 2013年3月 (14) 2013年2月 (13) 2013年1月 (15) 2012年12月 (14) 2012年11月 (14) 2012年10月 (15) 2012年9月 (14) 2012年8月 (13) 2012年7月 (13)

  • Using filesort

    去年ソートに関する記事を書いたが、今日はその続きである。 MySQLでEXPLAIN SELECT...を実行するとExtraフィールドでよく見かける「Using filesort」という文字列。Filesortって一体なんだろう?と思ったことはないだろうか。単刀直入に言ってFilesortの正体はクイックソートである。 クエリにORDER BYが含まれる場合、MySQLはある程度の大きさまでは全てメモリ内でクイックソートを処理する。ある程度の大きさとはsort_buffer_sizeであり、これはセッションごとに変更可能である。ソートに必要なメモリがsort_buffer_sizeより大きくなると、テンポラリファイル(テンポラリテーブルではない)が作成され、メモリとファイルを併用してクイックソートが実行される。 Filesortは全てのソート処理において実行されるわけではない。前回の記事

    Using filesort
  • テレビのリモコンを孫の手で押すなって!:ベンチャー社長で技術者で:エンジニアライフ

    株式会社ジーワンシステムの代表取締役。 新しいものを生み出して世の中をあっといわせたい。イノベーションってやつ起こせたらいいな。 弊社でやっているSQL講座の最初の方でお話しする内容です。 どれぐらいの人が試すのかな……、知ってる人にとっては極めて当たり前のことですけれど、知らない人は、けっこうびっくりする人もいるので、実際にやってみることを強くおすすめします。(できないという人はセミナーに来なはれ) では、ちょっとしたサンプルを作るか、それなりにデータ量のある既存のテーブルのインデックスを張ったカラムに対して、以下のSQLの実行計画を取ってみてください。 【注意事項】 実行計画を取る前に、Oracleは一応、アナライズをしておいてください。SQLServerは主キー以外のインデックスがある列を使うこと。 【準備】 SELECT MIN(カラム) , MAX(カラム) FROM テーブル

    テレビのリモコンを孫の手で押すなって!:ベンチャー社長で技術者で:エンジニアライフ
  • ちょっと変わった (?) 小計の求め方 - ぐるぐる~

    小計行を出したい場合は ROLLUP やら CUBE やらを使うのが普通なんだろうけど、それらが使えない環境というものもあるわけで・・・*1 *2 で、効率無視してでも出したい場合、以下のように書けばいい。 -- 明細行と SELECT Customer.id , Customer.name , Item.id , Item.name , Item.price , Account.quantity , Account.quantity * Item.price , Account.remark FROM Customers Customer INNER JOIN Accounts Account ON Customer.id = Account.c_id INNER JOIN Items Item ON Account.i_id = Item.id UNION ALL -- 小計行をUNI

    ちょっと変わった (?) 小計の求め方 - ぐるぐる~
  • NULLIF 関数の実用的な使い方 - ぐるぐる~

    NULLIF 関数って動作の説明は多いけど、それを何に使えばいいのかってあんまり理解されてないんじゃないかと思う。 ってことで、NULLIF 関数の実用的な使い方をいくつか紹介する。 NULLIF 関数の動作 まずは、NULLIF 関数の動作から。 NULLIF 関数は引数を 2 つとって、引数が等しい場合に NULL を返し、異なる場合に第一引数を返すだけの、動作自体はかなり簡単な関数。 例えば、 SELECT col_a, col_b, NULLIF(col_a, col_b) FROM SomeTable; これを実行すると、次のような結果が得られる。 col_a col_b NULLIF(col_a, col_b) 10 10 NULL 10 0 10 0 10 0 NULL NULL NULL また、プログラマのためのSQL 第2版では、CASE 式を用いて、 NULLIF(V1

    NULLIF 関数の実用的な使い方 - ぐるぐる~
  • SQL の命名規約とフォーマット - ぐるぐる~

    ときどきの雑記帖さん経由で、私のSQLフォーマットをみて、自分の規約もさらしてみる*1 *2。 命名規約 テーブルやビュー、共通表式は Pascal 記法で、複数形とする*3。例えば、Employees とか Works とか ただし、リレーションテーブルはその限りではない。例えば、EmployeeWork とか カラム名はアンダーバー区切りで、単数形を基とする。例えば、name とか 人工キーを使用する場合、 自身の人工キーは id とする 外部キーはテーブルの頭文字の小文字 _id を付けたものとする。例えば、e_id とか 重複する場合は・・・決めてない (ぉ テーブルに別名を付ける場合、テーブル名の単数形を使用する 自己結合等でテーブルの区別が必要な場合、子テーブル側に C と付ける 孫には GC、GGC と付けていく (実際、そんなに深い自己結合なんてしないけど) フォーマット

    SQL の命名規約とフォーマット - ぐるぐる~
  • 大きいテーブルをスキャンしないようにする - ぐるぐる~

    BigTableは一日最大1000件のペースで増えていく nameを持つが、重複がかなり多い SmallTableは200〜300件のデータ量 nameを持つが、重複は存在しない(PK) SmallTableの一覧をGUIに表示する必要がある ただし、BigTableにnameが同じデータがある場合、マークをつける必要がある こんな条件で上がってきたプログラムを実行すると、なんかまだデータ数が少ないのにえらく重い。 処理を見てみると、SmallTableを全件取得して、一件一件削除を試みて外部キー違反の例外をcatchすることでチェックしてる*1・・・ そりゃ重いよ、と突っ返したら、今度はBigTableを全件取得してローカルでループまわして存在チェックをかけるコードが・・・ 開発時だから*2さくさく動くものの、それは駄目だろう、とまた突っ返したら、今度はBigTableをnameでGRO

    大きいテーブルをスキャンしないようにする - ぐるぐる~
  • 変数に型のない言語におけるSQLインジェクション対策に対する考察(5): 数値項目に対するSQLインジェクション対策のまとめ - 徳丸浩の日記(2007-09-24)

    _数値項目に対するSQLインジェクション対策のまとめ 一連の議論では、以下の条件におけるSQLインジェクション対策について議論している。 SQLインジェクション対策において、バインド機構が利用できない(したくない) 変数に型のない言語(PerlPHPRubyなど)を使用している 数値型の列の場合 この場合の対策としては、以下の二種類が機能する。 SQL文組み立ての前に、数値としての妥当性検証を行う 数値項目もシングルクォートで囲み(クォートし)、文字列リテラルと同様のエスケープを行う 数値項目もクォートする方法 このうち、後者の積極的な推進者として大垣靖男氏がおられる。例えば、以下のような記事 すべての変数をエスケープする対策 この方法はすべてのデータベースに利用できる対策です。文字列,整数などデータ型に関わらず変数すべてを文字列としてエスケープすることにより,SQLインジェクションを