DB関係

DBで設定できる制約

DBで設定できる制約について調べてみました〜 unique制約 同じ値は登録できない制約です。 not null制約 nullを登録できない制約です。 primary key制約 主キーを設定する制約です。 null、同じ値が保存できなくなります。 railsだとidにデフォルトでprimary…

t.referencesとforeign_key: true

テーブルを作成する際、外部キー周りの設定でt.referencesとforeign_key: trueが何をしてくれるのか・してくれないのか曖昧だったので調べました。 t.references 参照モデル名_idというカラム名で参照モデルのidと紐付けてくれる これだけだと参照にないidで…

where.not

アクティブレコードのwhere.notを使った実装を考えていたのですが、 where.notが変換されるSQL(WHERE ~ NOT IN)にはINの引数にNILLである値が含まれていると何も取得できないという注意点があるようなので、where.notでもそうなの?!と思い試してみました。…

外部キー制約

外部キー制について考える機会があったのでメモしておきます〜 外部キー制約とは 外部キーは関連づけているテーブル間のデータの整合性を保つために存在する制約です。 外部キー制約を設定しておくと、存在しないidで外部キーを保存する事ができなくなります…

アクティブレコードでのトランザクション

昨日はSQLでのトランザクションについて書いたので、 今日はアクティブレコードでのトランザクションについて調べてみました! 書き方 以下のように書くことができます。 ① モデル.transaction do ② DBに変更を加える(updateやdeleteなど)③ end④ 上手くいっ…

トランザクション

トランザクションが何かということは書籍や記事を読んで知っていたのですが、先日初めて業務で使う機会があったのでメモしておこうと思います! トランザクションとは 一連のまとまった処理のことです。 処理の途中までしか実行されなかったらまずい処理など…

サブクエリとJOIN

サブクエリとJOINどちらでもデータ取得できることあるよな、比べてみよう、と思い比較してみました。 以下はどちらもeventsテーブルのidが1であるものと関連するpetsレコードを取得しています。 JOIN select * from pets join events on pets.name=events.na…

AS句

SQLを調べていると度々出てくるAS句について、なんとなくの理解だったので今回調べることにしました。 AS句とは カラムに対して別の名前をつけることができる句です。 元々テーブルにあるカラム対しても、計算結果を表すカラムに対しても名前を付けることが…

サブクエリ

以前から気になっていたサブクエリについて調べました〜 サブクエリとは SELECT文の引数にまたSELECT文が渡されるようなクエリのことです。 例 SELECT * FROM events WHERE id in (1,3,5,7); このようにin句で絞り込むSELECT文があるとします。 このidの配列…

SQLの実行される順番

先日、HAVING構文について調べた時、条件を指定するのはWHEREと同じですが、実行される順番が違うと知りました。 そこでSQLの実行される順番について興味が湧いたので調べてみました! SQLの実行される順番 FROM(テーブルを指定) ON(テーブル結合の条件を指…

GROUP BYとHAVING

なんとなくの理解だったGROUP BYとHAVINGについて調べました〜 GROUP BYとは データをグループ化する関数です。 使い方 GROUP BY カラム名 とする事で、カラムの値が同じものをグループ化してくれます。 以下のようなreviewsテーブルがあるとします。 gyazo.…

includesの挙動模索

普段、N+1問題を防ぐためにとりあえずincludesをしてしまうのですが、includesがどんな挙動をしているのか理解していなかったので調べることにしました! (昨日からActiveRecord読みたい気持ちが高まっていたため、includesのソースコードを読むことに挑戦し…

銀座Railsへ行った

銀座Railsへ行って、Railsコミッターの@kamipoさんと@yahondaさんのセッションをお聞きしてきました! Active Recordの難しい話もありましたが、お話が面白かったので分からないなりにも楽しむことができました!! 自分もすぐに取り入れていこうと思った内…

SQLの集合関数

SQLの集合関数についてしらべました〜 集合関数とは SQLにもとから用意されている関数です。 集合関数の種類 以下の5種類の関数があります。 COUNT:総数を取得 SUM:総和を取得 MAX:最大値を取得 MIN:最小値を取得 AVG:平均を取得 使い方 以下のようなre…

エスケープ文字

「%」や「_」をワイルドカードとしてではなく文字列として検索したいときに使用するエスケープ文字 エスケープ文字とは 「\」です。 「%」や「_」をワイルドカードとしてではなく文字列として検索したいときに使用します。 例:以下のようなeventsテーブル…

LIKE句

SQLのLIKE句について調べました。 LIKE句とは 完全一致だけでなく部分一致、前方一致、後方一致など曖昧な条件を指定できる構文です。 前提 以下のようなeventsテーブルがあるとします。 id name date description 1 Whistler 1999-11-09 Went hiking. 2 Puf…

IN句

以前から理解したいと思っていたIN句について調べました〜 IN句とは 一致するかの条件をまとめて判断出来るSQLの構文です。 具体例 以下のようなeventsテーブルを操作するとします。 id name date description 1 Whistler 1999-11-09 Went hiking. 2 Puffbal…

SQLの比較演算子

WHEREで条件を指定する際に必要となる比較演算子について調べました〜。 比較演算子 SQLの比較演算子には以下のものがあります。 a = b (a と b は等しい) a <=> b (a と b は等しい) a != b (a と b は等しくない) a <> b (a と b は等しくない) a < b (a …

テーブルの結合(join)

昨日、結合(join)について理解しきれないままだったので続きを調べました。 結合(join)の種類 以下の5種類があります。 INNER JOIN (内部結合) LEFT (OUTER) JOIN (左外部結合) RIGHT (OUTER) JOIN (右外部結合) FULL (OUTER) JOIN (完全外部結合) …

リレーショナルデータベースの表操作

選択・射影・結合という言葉について整理しておきたいと思い調べました! 表操作とは リレーショナルデータベースは表(テーブル)でデータを管理しており、この表を操作することを表操作といいます。 表操作のことを関係演算ともいいます。 リレーショナルデ…

またbundle installがmysqlでこけた

ちょっと期間があくとbundle installした際にmysql gemが入らなくなることがしばしばあります。 今回はopensslのバージョンが古いようでインストールに失敗しておりました。 無事bundle installできるまでの手順を書いておこうと思います。 エラー内容 bundl…

テキストファイルからデータ作成する際のエラー

本日はSQLの勉強をしておりました。 mysqlのコンソール上でデータベースとテーブルを作成したのち、 テーブルの各属性の値をタブ区切りで書いたテキストファイルを読み込んでデータを作成しようと試してみたのですが、以下のエラーが出ておりました。 mysql>…

データベース①

今日はそもそものデータベースの役割や種類、正規化について調べてみました〜! そもそもデータベースとは システムやユーザが扱うデータを後々扱いやすい形に整理して管理するものです。 何に関するどんな属性の値か、何と関連しているかなどを管理します。…

基本情報技術者試験

来年4月に基本情報技術者試験を受けてみようと思います! 何故やるか 以前からエンジニアとして働く上で必要となる基本的な知識が足りていない事を実感していました。必要となったらその都度調べたり勉強するようにしていたのですが、もっと体系的に幅広く学…

DumpファイルのデータをDockerのMysqlへ入れる

やっとDumpファイルのデータをDockerのMysqlへ入れることができたので やり方を書いておこうと思います! 方法 ダンプファイルを用意 ダンプファイルを用意し、アプリ直下へ置きます。 ダンプファイルの schema情報と現在のDBが違う状態となっている場合、ダ…

activerecord-import

レコードをいっぺんに複数作成するメソッドを以下のように書いてしまっておりました。 def import_hoges hoges = params[:hoges] hoges.each do |hoge| Hoge.create!( user_id: @login_user.id, recorded_at: hoge[:recorded_at], value: hoge[:value]) ende…

情報調べる系コマンド極めたい。

普段dockerからmysqlを使っておりましたが、ローカルからmysqlを使いたい事情があり接続を試みました。 しかし以下のように接続に失敗しました。 $ mysql -uroot fish: Unknown command mysql 理由を調べるため、brew info mysqlコマンドで調べてみたところ…

[postgresql] dyld: Library not loadedの解決方法

postgresqlが動かなくなり、アンインストールしようか悩むほど格闘したので、解決方法を書いておこうと思います。 (長時間格闘した割にあっさり直ってしまいましたが) エラー内容 数日ぶりにpostgresqlを使用したアプリを立ち上げようとしたら接続できなくな…

gemでER図を作成してみる

新しいプロジェクトに参加することになったので、まずは現在どんなテーブルがあるのか確認してみようと思いました! そこでER図を作成してくれるgemを調べてみたところ、rails-erdというものがあると知りました! とても便利だったのでその使い方について書…

クエリキャッシュ

ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い - Qiita こちらの記事を理解する上で、クエリキャッシュについてもわかっておかないといけないと思った為調べてみることにしました!! クエリキャッシュとは データベースを参照した結果をメモリ…