JUST FOR FUN

Twitter:@okwra Facebook:ayato.ookawara GitHub:@tearon4 other:@taiga006

MySQLでSELECT FOR UPDATEと行ロックの挙動を検証してみた

どうも、今日も今日とて野毛で飲みながらブログを書いている@okwraです。

今日は、普段あまり意識してこなかったMySQLInnoDBでのロックの振る舞いについて色々実験してみました。(もちろん、きっかは自分がドツボにはまったから)

ちゃんと理解するためには「共有・排他的ロックとは」って話や、「行ロックってつまりインデックスレコードロックだよね」などの話とか理解する必要があるんですが、それは

github.com

をちゃんと一読してもらえれば十分かと思います。

(というか、これが問題なく読めて理解できる人はこの記事読む必要ない….)

以下は上のドキュメント含め関連する記事などを読んで自分でInnoDBの行ロック周りについて、というかSELECT FOR UPDATEについて理解を深めるために手元で実験したことのまとめです。

技術的にちゃんとした理解を深めたい人は最後にまとめた参考サイトも是非ご覧になってください。

これを書いてる人はまだまだ理解が完璧ではないので怪しい部分がきっとあるんですが、ご指摘等は@okwraまで宜しくお願いします。

目次

  • SELECT FOR UPDATEとLOCKING READ
  • 条件なしでロックをかける
  • 主キーの条件つきで行のロックをかける
  • 制約のないキーのみの条件で行のロックをかける
  • 制約のあるカラムとないカラムでの複数条件でロックをかける
  • 参考
続きを読む

MySQLでcsvファイルをインポートしようとしたらハマった

f:id:taiga006:20180211191607p:plain

MySQLInnoDBの行ロック周りのあれこれを勉強しようと思って、ネットで拾ったデータをCSV形式にして手元に保存。

CSVデータのインポートコマンドについては...

qiita.com

さっそくローカルのMySQLでデータをインポートしようと試みたところ

mysql> LOAD DATA LOCAL INFILE '/tmp/hoge.csv' INTO TABLE zuno_o FIELDS TERMINATED BY ',' ENCLOSED BY '"';
ERROR 1148 (42000): The used command is not allowed with this MySQL version

と出てしまった。
「えーversionとか...なんだ、面倒だけどアプデとかしないとダメなのかー?」
と最初は思ったが
(あれ?手元のversionそんなに古くないはずだぞ?)
と思い、とりあえずググることに。

(mysql) コマンド行クライアントの場合、--local-infile[=1] オプションを指定することによって LOAD DATA LOCAL を有効にするか、--local-infile=0 オプションを指定することによってこれを無効にします。

(中略)

サーバーまたはクライアントのいずれかで LOAD DATA LOCAL が無効な場合、そのようなステートメントを発行しようとしたクライアントは次のエラーメッセージを受け取ります。

ERROR 1148: The used command is not allowed with this MySQL version

MySQL 5.6 リファレンスマニュアル LOAD DATA LOCAL のセキュリティーの問題

詳しくは上のURLを読んで欲しいですが、セキュリティがらみの問題でデフォルトではできなくなっている模様。

ということで...

$ mysql -u (USER) -p (PASSWORD) --local_infile=1

...

mysql> LOAD DATA LOCAL INFILE '/tmp/hoge.csv' INTO TABLE hoge FIELDS TERMINATED BY ',' ENCLOSED BY '"';
Query OK, 18 rows affected, 28 warnings (0.00 sec)
Records: 22  Deleted: 0  Skipped: 4  Warnings: 28

やったぜ!!

ちなみに、my.cnfに

[client]
loose-local-infile=1

を追加するのでもOK。

「ないもの、あります」(クラフト・エヴィング商會・著)を読んだ。

「堪忍袋の緒」「自分を上げる棚」「思う壺」「捕らぬタヌキの皮ジャンバー」「転ばぬ先の杖」「目から落ちたうろこ」「冥途の土産」「大風呂敷」 etc ...

 

みんなが知っている、使っているけれど本当はそんなもの、この世には「ないもの」を売っているお店のカタログブック。時に親身で時に皮肉めいていて、なんだか屁理屈っぽい。

挿絵の柔らかい感じも合間ってまるで本当にあるものみたいな、何よりあったらいいなと思わせてくれる内容。

 

f:id:taiga006:20180210195640j:plain

 「助け舟」

 

「真面目にふざける」ことに正面からチャレンジしている感じが好きだ。

きっと著者は書いていて楽しかっただろうな、と思わせてくれる本はいい本だ。

 

クラウド・コレクター」で有名なクラフト・エヴィング商會・著。

 

クラウド・コレクター―雲をつかむような話

クラウド・コレクター―雲をつかむような話

 

 

思わず手に取りたくなるような、シンプルで変わったサイズ感の装幀も素晴らしい。

(ネタバレだけど読後に帯を外そうとしたら表紙と一体になっていてびっくりした。芸が細かい。笑)

本編ではないけど、巻末の赤瀬川原平氏の「ビール」と「とりあえず」の""言葉の腐れ縁""を綴った書き下ろしエッセイも素敵。

 

f:id:taiga006:20180210200050j:plain

 (とりあえずビール)

 

日本語って面白いな、と改めて思った。

 

ないもの、あります (ちくま文庫)

ないもの、あります (ちくま文庫)