=> SELECT `author`, `title` FROM `posts` WHERE `status` = 'draft' AND `author` IN('author1','author2') ORDER BY `created_at` DESC, `id` DESC LIMIT 0, 10;
// 修改数据,将会根据主键 ID 查找,并更新 const row = { id: 123, name: 'fengmk2', otherField: 'other field value', // any other fields u want to update modifiedAt: this.app.mysql.literals.now, // `now()` on db server }; const result = awaitthis.app.mysql.update('posts', row); // 更新 posts 表中的记录
=> UPDATE `posts` SET `name` = 'fengmk2', `modifiedAt` = NOW() WHERE id = 123 ;
// 如果主键是自定义的 ID 名称,如 custom_id,则需要在 `where` 里面配置 const row = { name: 'fengmk2', otherField: 'other field value', // any other fields u want to update modifiedAt: this.app.mysql.literals.now, // `now()` on db server };
const result = awaitthis.app.mysql.delete('posts', { author: 'fengmk2', });
=> DELETE FROM `posts` WHERE `author` = 'fengmk2';
直接执行 sql 语句
插件本身也支持拼接与直接执行 sql 语句。使用 query 可以执行合法的 sql 语句。
注意!!我们极其不建议开发者拼接 sql 语句,这样很容易引起 sql 注入!!
如果必须要自己拼接 sql 语句,请使用 mysql.escape 方法。
参考 preventing-sql-injection-in-node-js
1 2 3 4
const postId = 1; const results = awaitthis.app.mysql.query('update posts set hits = (hits + ?) where id = ?', [1, postId]);
=> update posts set hits = (hits + 1) where id = 1;
使用事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等。这时候使用事务处理可以方便管理这一组操作。 一个事务将一组连续的数据库操作,放在一个单一的工作单元来执行。该组内的每个单独的操作是成功,事务才能成功。如果事务中的任何操作失败,则整个事务将失败。