前置き
Lambdaなどでmysqlを実行するにあたっての簡易メモ
仕様は公式から参照
.query(sqlString, values, callback)
でプレースホルダー値を利用する
(connection作成は省略します。)
- 第一引数のSQLに?を指定する。
- 第二引数に配列を渡す。
SELECT
constsql="SELECT * FROM sample WHERE id = ?";constdata=[1];constquery=connection.query(sql,data,(err,results,fields)=>{if(error)throwerror;// ...});console.log(query.sql);// SELECT * FROM testdb.sample WHERE id = 1
フィールド名に使う場合は??を指定する。
constsql="SELECT ?? FROM ?? WHERE id = ?";constcolumns=['id','name','email'];constdata=[columns,'users',1]constquery=connection.query(sql,data,(err,results,fields)=>{if(error)throwerror;// ...});console.log(query.sql);// SELECT id, name, email FROM users WHERE id = 1
INSERT
複数カラムを1つの?で対応できます。
constsql="INSERT INTO posts SET ?"constpost={id:1,title:'Hello MySQL'};constquery=connection.query(sql,post,(error,results,fields)=>{if(error)throwerror;// ...});console.log(query.sql);// INSERT INTO posts SET id = 1, title = 'Hello MySQL'
複数行のinsertを行う場合は(?)を使用する
※insertするレコード数分必要。
constsql="INSERT INTO users(name, age, sex) VALUES(?),(?),(?)"constdata=[['boy',23,'man'],['girl',14,'woman'],['guy',42,'man']];constquery=connection.query(sql,data,(error,results,fields)=>{if(error)throwerror;// ...});console.log(query.sql);/*
INSERT INTO
users(name, age, sex)
VALUES
('boy', 23, 'man'),
('girl', 14, 'woman'),
('guy', 42, 'man')'
*/
UPDATE
constsql="INSERT INTO users SET name = ? WHERE id = ?"constdata=['佐藤',1];constquery=connection.query(sql,data,(error,results,fields)=>{if(error)throwerror;// ...});console.log(query.sql);// INSERT INTO users SET name = '佐藤' WHERE id = 1
複数行もinsertと同じ。
onduplicate key updateのサンプル
constsql="INSERT INTO users(name, age, sex) VALUES(?),(?) ON DUPLICATE KEY UPDATE age = VALUES(age) "constdata=[['boy',25,'man'],['girl',16,'woman']];constquery=connection.query(sql,data,(error,results,fields)=>{if(error)throwerror;// ...});console.log(query.sql);/*
INSERT INTO
users(name, age, sex)
VALUES
('boy', 25'man'),
('girl', 16, 'woman')
ON DUPLICATE KEY UPDATE age = VALUES(age)
*/