Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
データベースで 沼った話
Slide 2
Slide 2 text
自己紹介
Slide 3
Slide 3 text
● 木村 宗吾(k1mu) ● 所属 ○ 株式会社ラクーンホールディングス技 術戦略部 ● 領域 ○ バックエンド(+フロントエンド) ● 言語 ○ 業務 ■ Java PHP ○ 業務外 ■ Go C(++) ● X ○ @detunote
Slide 4
Slide 4 text
なぜこの話をするのか ● テーマが初めてのLTとの事で、せっかくなら1年目として印象に残ったことを話す と面白いのでは ● DBを触る方は多いと思うので、知らなかったのであればこれからの知見として ほしい
Slide 5
Slide 5 text
DBに関して
Slide 6
Slide 6 text
皆さんDBは何を使った事があります?
Slide 7
Slide 7 text
今回の説明で使うDB
Slide 8
Slide 8 text
沼った問題
Slide 9
Slide 9 text
前提 (テーブル)
Slide 10
Slide 10 text
前提 (データ)
Slide 11
Slide 11 text
テーブルをUPDATE UPDATE users SET name = '木村' WHERE id = 3; ID3の名前を木村に変更するUPDATEを実行する
Slide 12
Slide 12 text
結果 ID3の名前が変わっている MySQL ORACLE
Slide 13
Slide 13 text
別のSQLエディター 等で確認 Oracleの方ではID3の Nameが変わっていない ORACLE MySQL
Slide 14
Slide 14 text
内容が反映されていな い...!?
Slide 15
Slide 15 text
最後にCommitした?
Slide 16
Slide 16 text
解決方法 UPDATE users SET name = '木村' WHERE id = 3; commit;
Slide 17
Slide 17 text
結果 別のエディターで見ても データが入っていて UPDATEもされている。
Slide 18
Slide 18 text
DBに反映された!
Slide 19
Slide 19 text
原因 ● コミットしていなかったため、利用中のトランザクションでしかUPDATEが反映さ れていなかった。 ● 正直MySQL = ORACLE のように考えていた。 ○ MySQLなどにはAuto Commitがあり、標準ではONになっているので最後に自分で Commitを 明示的に宣言する必要がない。 ○ OracleにもAuto Commitがあるが標準ではOFFになっている。
Slide 20
Slide 20 text
他にも ● バージョンによってOracleにはオートインクリメントがない ○ シーケンスを利用して連番を生成する必要がある。 ● LimitがないのでRowNumを利用して行数を制限 ● SELECT句にGROUP BY句にない列を含めることができるが、その列は集約関 数の中で使用される必要がある。 ● Oracleでは空文字はNullと同等に扱える
Slide 21
Slide 21 text
仕様はちゃんと 調べてから使おう
Slide 22
Slide 22 text
宣伝 弊社のconnpassページ https://raccoon-holdings.connp ass.com