node.js中使用mysql2实现CURD增删改查的mysql语句

9 阅读3分钟

参数类型验证

注意: 在mysql中操作的参数类型是强验证,比如一个Number字段传入String数据会报错。

query(sql)向数据库发起查询的两种写法

  • 可以使用连接池查询pool.query(),也可以使用新连接查询connection.query()
  • sql:需要执行的mysql语句。

占位符写法

这种写法通常被称为参数化查询(Parameterized Query)或预编译语句(Prepared Statement)。这种做法通过在SQL语句中使用占位符(如问号 ? 或命名参数 :paramName),然后在执行时再提供具体的值。这样做可以有效防止SQL注入攻击,因为数据库驱动会确保提供的参数被正确地转义和处理。

  • 需要在query(sql,[...values])的第二个参数要按sql里?占位符的顺序依次传入参数以[]数组形式(单个数据也要包裹在数组里),如['123', 2, '33'][32]
let mysql = 'INSERT INTO user (openId, createIp, updateIp) VALUES (?, ?, ?)';
await pool.query(mysql, ['sDFdjf23GY','0.0.0.0', '192.168.0.1']);

mysql = 'DELETE FROM address WHERE addressId = ?'
await pool.query(mysql, [32]);

mysql = 'UPDATE address SET phone = ?, city = ? WHERE addressId = ?'
await pool.query(mysql, ['17688888888','杭州', 32]);

mysql = 'SELECT * FROM goods WHERE goodsId = ?'
await pool.query(mysql, [1043]);

静态SQL写法

这种写法称为静态SQL(Static SQL)或内联值(Inline Values)。这种方式将要插入的具体值直接写入SQL语句中。虽然它在某些情况下更加直观和简单,但当涉及到动态数据或用户输入时,如果没有适当的安全措施,可能会导致安全风险,尤其是SQL注入。

let mysql = 'INSERT INTO user (openId, createIp, updateIp) VALUES ('sDFdjf23GY', '0.0.0.0', '192.168.0.1')';
await pool.query(mysql);

mysql = 'DELETE FROM address WHERE addressId = 32'
await pool.query(mysql);

mysql = 'UPDATE address SET phone = '17688888888', city = '杭州' WHERE addressId = 32'
await pool.query(mysql);

mysql = 'SELECT * FROM goods WHERE goodsId = 1043'
await pool.query(mysql);

增 INSERT

  • INSERT INTO后面跟着的是需要操作的表名。
  • VALUES前面是字段名,不用''单引号包裹字段名。
  • VALUES后面是参数,顺序必须和前面字段名顺序一样。
  • INSERTVALUES前后字段和参数的()括号都不能省略(单个字段也不能省略)。
mysql = 'INSERT INTO user (openId, createIp, updateIp) VALUES (?, ?, ?)';
await pool.query(mysql, ['sDFdjf23GY','0.0.0.0', '192.168.0.1']);

mysql = 'INSERT INTO user (openId, createIp, updateIp) VALUES ('sDFdjf23GY', '0.0.0.0', '192.168.0.1')';
await pool.query(mysql);

删 DELETE

  • FROM后面跟着的是需要操作的表名。
mysql = 'DELETE FROM address WHERE addressId = ?'
await pool.query(mysql, [32]);

mysql = 'DELETE FROM address WHERE addressId = 32'
await pool.query(mysql);

改 UPDATE

  • UPDATE后面跟着的是需要操作的表名。
  • SET后面填写需要修改的字段和参数字段名 = 参数,如果有多个字段需要修改使用,拼接。如:SET phone = '111'SET phone = '111', city = '杭州'
    注意SET后面最后一个字段和参数后面不能加逗号。
mysql = 'UPDATE address SET phone = ?, city = ? WHERE addressId = ?'
await pool.query(mysql, ['17688888888','杭州', 32]);

mysql = 'UPDATE address SET phone = '17688888888', city = '杭州' WHERE addressId = 32'
await pool.query(mysql);

查 SELECT

  • SELECT后面表示要返回的字段,*返回所有字段,字段名返回特定字段,返回多个字段用,拼接。如:SELECT countSELECT count, pirce
    注意SELECT后面最后一个字段名后面不能加逗号。
  • FROM后面跟着的是需要操作的表名。
mysql = 'SELECT * FROM goods WHERE goodsId = ?'
await pool.query(mysql, [1043]);

mysql = 'SELECT * FROM goods WHERE goodsId = ?'
await pool.query(mysql, [1043]);