Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
MySQLのUPDATE文にORDERが指定できると知った件
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ham
May 18, 2021
Technology
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
MySQLのUPDATE文にORDERが指定できると知った件
ham
May 18, 2021
More Decks by ham
See All by ham
その投資は、資本になっていますか?AI時代の開発投資を、ROIだけで判断しない「開発資本」という考え方
ham0215
0
130
プロダクト開発から業務改善コンサルまで。事業全体へ「染み出す」ことで広がるエンジニアの可能性
ham0215
0
230
AI時代に「チーム開発」を見直す ~個人アサインへのシフトと、AI駆動開発の実践例~
ham0215
0
69
機能開発を止めないために!運用と開発のバランスを可視化するために使っている指標をご紹介
ham0215
0
68
未来のAI駆動開発をイメージしながらAI開発基盤を整備する
ham0215
1
220
AIと過ごす1日〜全業務フローにAIを組み込む実践ガイド〜
ham0215
0
170
生成AIによる生産性向上〜テック企業やファインディの活用事例〜
ham0215
1
160
生成AI導入の効果を最大化する データ活用戦略
ham0215
0
670
データ駆動経営の道しるべ:プロダクト開発指標の戦略的活用法
ham0215
2
590
Other Decks in Technology
See All in Technology
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
150
「とりあえず動く」の先へ。 AI時代のチーム開発と内部設計/2026-slsdays
slsops
0
140
BedrockとLambdaで作る リアルタイム進行型推理ゲーム
kawametho
0
190
Meet AgentCore Identity Consent Portal
hironobuiga
3
190
Snowflake Horizon Catalog と Apache Iceberg で作る オープンなデータ基盤
kitagawaz
0
440
カンファレンスに参加した後の浮遊感とセルフケア
pauli
0
310
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
330
サーバーフルコンピューティング?AWS Lambda
iwatatomoya
1
240
形式手法を使って仕様をコーディングしよう
mikanichinose
0
180
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
500
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
130
freeeらしさをAIとともに作る / Creating the freee Experience with AI
ymrl
0
190
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
28
2.9k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
How to train your dragon (web standard)
notwaldorf
96
6.8k
Balancing Empowerment & Direction
lara
6
1.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Building AI with AI
inesmontani
PRO
1
1.3k
Automating Front-end Workflow
addyosmani
1369
210k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
460
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Transcript
MySQLのUPDATE文に ORDERが指定できると知った件 2021/5/18 Dev MTG ham
何をやろうとしていたのか
シーケンシャルなデータを更新しようとした 下記のテーブルのsequential_idを一括で更新しようとしていた。 ※同じparent_idで重複したsequential_idを持てないように、 [parent_id, sequential_id]でユニーク制約あり Field Type memo id bigint
PRIMARY KEY; auto_increment parent_id bigint sequential_id int unsigned parent_id内で連番
シーケンシャルなデータを更新しようとした 下記のデータがある場合、途中にレコードを追加したい。 id parent_id sequential_id 1 100 1 2 100
2 3 100 3 1と2の間に新しいレコードを入れたい
シーケンシャルなデータを更新しようとした 最終的にはこうなればOK id parent_id sequential_id 1 100 1 4 100
2 2 100 3 3 100 4 ・レコードが追加される ・id: 2, 3のsequential_idが1増える
シーケンシャルなデータを更新しようとした 下記のデータがある場合、途中にレコードを追加したい。 UPDATE文1発で実行したいので下記のクエリーで実行 UPDATE hoges SET sequential_id = sequential_id +
1 WHERE parent_id = 100 ABD sequential_id >= 2; id parent_id sequential_id 1 100 1 2 100 2 3 100 3 sequential_id=2はid: 2に使われている ので、先にid: 2, 3のsequential_idをず らす。
シーケンシャルなデータを更新しようとした 下記のデータがある場合、途中にレコードを追加したい。 UPDATE文1発で実行したいので下記のクエリーで実行 UPDATE hoges SET sequential_id = sequential_id +
1 WHERE parent_id = 100 ABD sequential_id >= 2; id parent_id sequential_id 1 100 1 2 100 2 3 100 3 sequential_id=2はid: 2に使われている ので、先にid: 2, 3のsequential_idをず らす。 ユニーク制約違反のエラーが発生・・・!!
シーケンシャルなデータを更新しようとした 下記のデータがある場合、途中にレコードを追加したい。 UPDATE文1発で実行したいので下記のクエリーで実行 UPDATE hoges SET sequential_id = sequential_id +
1 WHERE parent_id = 100 AND sequential_id >= 2; id parent_id sequential_id 1 100 1 2 100 2 3 100 3 Update文が1つでも内部的には1レコードずつ更 新される。 (✗全てのレコードが一発で同時更新されるわけ ではない) →MySQLでは順序が未指定の場合は大体Primary Key(今回はid)順に動く。 →今回もidの小さい2のレコードから更新しよう としてid:3のレコード(100-3のユニーク制約)と衝 突したと考えられる。
じゃあどうするか? 今回やりたいことはsequential_idのインクリメント。 ということはsequential_idの大きいものから順番に更新していけばユニーク 制約に引っかからないはず。 でもUpdateって内部の更新順制御できるの??? そこで公式ドキュメント https://dev.mysql.com/doc/refman/5.6/ja/update.html
じゃあどうするか? 今回やりたいことはsequential_idのインクリメント。 ということはsequential_idの大きいものから順番に更新していけばユニーク 制約に引っかからないはず。 でもUpdateって内部の更新順制御できるの??? そこで公式ドキュメント https://dev.mysql.com/doc/refman/5.6/ja/update.html ORDER BYあるやん!!!! UPDATE
[LOW_PRIORITY] [IGNORE] table_reference SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... [WHERE where_condition] [ORDER BY ...] [LIMIT row_count]
シーケンシャルなデータを更新しようとした ORDER BY sequential_id DESCを付けることで無事Update成功 UPDATE hoges SET sequential_id =
sequential_id + 1 WHERE parent_id = 100 ABD sequential_id >= 2 ORDER BY sequential_id DESC; id parent_id sequential_id 1 100 1 2 100 3 3 100 4
シーケンシャルなデータを更新しようとした sequential_id: 2があいたのであとはINSERTすればOK INSERT INTO hoges (parent_id, sequential_id) VALUES (100,
2); 無事、id:4のレコードの追加完了!! id parent_id sequential_id 1 100 1 4 100 2 2 100 3 3 100 4