📌

mysql memo

2021/02/02に公開

mysql

コマンド したいこと
show columns from address; テーブル詳細確認
aa Text
// 「INGORE」 無いなら登録
INSERT INGORE INTO users
  (userid,username)
SELECT 
  userid,
  username
FROM
  users2 ;
  
  // 「INGORE」 無いなら更新
  UPDATE IGNORE users
SET 
  userid = 1,
  username = 'tiger'
WHERE
  userid = 2;
  

pool.query()について

pool.query()はpool.getConnection() -> connection.query() -> pool.release()の一連の流れを処理を実行するショートハンド
ひとつのコネクションに対して複数のクエリを発行する場合には、pool.query()を使わずに、pool.getConnection()でコネクションを握ってからコールバック内で複数のクエリ発行を処理するのが良いかと
mysqlコネクションプールにおけるqueryの挙動の違いについて

createPoolの実装

レンダリングの際に複数クエリを読み込む方法

var connection = mysql.createConnection({multipleStatements: true});
参考:
mysql:Multiple statement queries

expressとの連携

NodeJS + MySQL + Herokuでアプリ制作!

初回実行時のデータ作成の方法参考

nodeと連携する時はConnectionPoolを使う!
じゃないと時間経つと接続切れてこんなエラーでる

app[web.1]: Error: Connection lost: The server closed the connection.

参考(この記事の後半)

全般

session管理

Warning: connect.session() MemoryStore is not
express-sessionだけだとメモリリークが起きる
express-mysql-sessionを使って回避する
https://www.npmjs.com/package/express-mysql-session

エラー記録

has exceeded the 'max_user_connections' resource

=> MySQLサーバーはユーザーごとに10の接続しか許可しておらず、その制限に達しているという意味

connection.release()の場所がよく無いかも?
connection.queryのcallback内に書かないと、順番が担保されず、セッション閉じてくれないかも
https://stackoverflow.com/questions/39150633/has-exceeded-the-max-user-connections-resource

Discussion