times-kzm

life log

MySQLのOK_Packet

よく、 result.LastInsertId() とか $conn->lastInsertId() みたいなのをよく見ると思うが、あれってどうやって取得しているんだろうと思って調べていたら、 OK_Packet というものに affected_rowslast_insert_id を詰めて返却してくれているみたい。

MySQL: OK_Packet

なんとなくauto incrementな値はinsert/update時に確定して、responseで帰ってきてそうなイメージがあったが、それが OK_Packet に該当する。

あまり良く考えずに SELECT LAST_INSERT_ID() を使うとthread safeに処理できないので気をつけたい

PDOはC言語で読む気がしないが、GoのDriverはGoで書かれているから読みやすい

https://github.com/go-sql-driver/mysql/blob/master/packets.go#L667-L698