equelize操作MySQL基本用法2

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: equelize操作MySQL基本用法

五:API略讲

以下用的查询条件解释:

$and: {a: 5}           // AND 连接: (a = 5)
$or: [{a: 5}, {a: 6}]  // OR 或者(a = 5 OR a = 6)
$gt: 6,                // 大于 id > 6
$gte: 6,               // 大于等于 id >= 6
$lt: 10,               // 小于 id < 10
$lte: 10,              // 小于等于 id <= 10
$ne: 20,               // 不等于 id != 20
$between: [6, 10],     // 中间值 BETWEEN 6 AND 10
$notBetween: [11, 15], // 中间值排除 NOT BETWEEN 11 AND 15
$in: [1, 2],           // 单值数组 IN [1, 2]
$notIn: [1, 2],        // 不在数组中 NOT IN [1, 2]
$like: '%hat',         // 模糊匹配 LIKE '%hat'
$notLike: '%hat'       // 模糊匹配的反向 NOT LIKE '%hat'
$iLike: '%hat'         // PG的模糊 ILIKE '%hat' (case insensitive)  (PG only)
$notILike: '%hat'      // PG的迷糊反向 NOT ILIKE '%hat'  (PG only)
$overlap: [1, 2]       // PG的操作 && [1, 2] (PG array overlap operator)
$contains: [1, 2]      // PG的操作 @> [1, 2] (PG array contains operator)
$contained: [1, 2]     // PG的操作 <@ [1, 2] (PG array contained by operator)
$any: [2,3]            // PG的操作 ANY ARRAY[2, 3]::INTEGER (PG only)

用的查询方法参数opts解释

Model.findAll({
  where: {          //条件判断
    attr0: 5,       //等值判断
    attr1: {
      $gt: 50       //条件比较
    },
  },
  attributes:["attr1"], //返回的字段
  order:["id","desc"],  //排序
  limit:10,             //返回个数,分页用到
  offset:0,             //起始位置,分页用到
  paranoid:false,       //是否返回虚拟删除的记录
  include:[{            //多表查询使用到的另外一个表
      model:model,      //表对象
      as:"asl",         //别名
      where:{},         //条件
      attributes:[],    //返回的属性
  }],  
  logging:false,        //日志,用于打印     
})

具体使用:

Sequelize的API基本覆盖了常用的使用方式,其中单表查询常用的有以下几种。复杂的可以参考更多的API。

1、查询多条 findAll(opts) 或者 all(opts)

查询用的参数普遍通用,只有部分API的有特殊参数。这里展示一次常用参数,下面就略过了。

let list = await model.findAll({
  where:{
    id:{$gt:10},//id大于10的
    name:"test"  //name等于test
  },
  order:[
    "id",   //根据id排序
    ["id","desc"]//根据id倒序
  ],
  limit:10,//返回个数
  offset:20,//起始位置,跳过数量
  attributes:["attr1","attr2"], //返回的字段
});
//select attr1,attr2 from model where ......

2、通过id查询 findById(id,opts)

这里默认数据的主键是id,查询的时候直接通过id查询数据。这里推荐在新建数据库的时候可以添加id作为唯一主键。

let model = await model.findById(12);
//select a,b,c from model where id=12;

3、查询一条记录 findOne(opts)

根据条件查询记录,这里的条件一定要填写,不然就是返回第一条数据了。

let model = await model.findOne({
  where:{id:12}
});
//select a,b,c from model where id=12;

4、分页查询 findAndCount(opts) 或者 findAndCountAll

分页查询恐怕是另外一个常用方法了。任何一个列表都有需要分页的时候。

这个方法会同时执行2个语句。

let data = await model.findAndCount({
  limit:10,//每页10条
  offset:0*10,//第x页*每页个数
  where:{}
});
let list = data.rows;
let count = data.count;
//select count(*) from model where ...;
//select a,b,c from model where .... limit 0,10;

5、添加新数据 create(model,opts)

添加就非常的自在了。简单的只需要传入model对象即可。这里要保证model对象的属性和字段名要一致。如果不一致就会出错。也可以传入配置参数来增加条件等。

let model= {
  name:"test",
  token:"adwadfv2324"
}
 await model.create(model);
//insert into model (name,token) values("test","adwadfv2324");

6、查询,不存在就返回默认对象 findOrInitialize(opts)

opts.default 默认值对象

这个方法首先会查询数据库,如果没有结果就会返回参数中的default对象。这个比较适合返回默认对象之类的场景

7、查询,不存在就新建一个 findOrCreate(opts)或者findCreateFind

这个方法用到的情况也比较多。通常用于自动创建不存在的数据。直接就返回了默认值。

8、有则更新,无则添加 upsert(model,opts) 或者 insertOrUpdate(model,opts)

根据主键或者唯一约束键匹配

常用于编辑的时候添加或者更新统一操作。

9、更新记录 update(model,opts)

就是最常用的更新方法,可以传入要更新的model对象,同时用配置参数有条件的区别要更新的对象。

10、删除记录 destroy(opts)

删除有2种情况,一种是物理删除。删除就从表中不存在了。另外一种就是设置paranoid,这个是虚拟删除,默认一个字段表示数据是否删除,查询的时候去掉这个条件即可查询到删除的数据。

11、恢复记录 restore(opts)

恢复多个实例,当启用paranoid时就可以使用这个方法将曾今删除的数据恢复了。

其他常用API

  1. 指定字段查询最大值 max("id",opts)
  2. 指定字段查询最小值 min("id",opts)
  3. 求和 sum("id",opts)
  4. 批量添加 bulkCreate([model],opts)
  5. 查表结构的信息 describe()
  6. 递增 increment("id",{by:1})
  7. 递减 decrement("id",{by:1})
  8. 统计查询个数 count(opts)

count - 统计数据库中的元素数

count可以统计数据库中的元素数:
Project.count().then(function(c) {
  console.log("There are " + c + " projects!")
})
Project.count({ where: ["id > ?", 25] }).then(function(c) {
  console.log("There are " + c + " projects with an id greater than 25.")
})

max - 查找指定表中最大值

// 数据库中有3条记录,年龄分别是 10, 5, 40
Project.max('age').then(function(max) {
  // 会返回 40
})
Project.max('age', { where: { age: { lt: 20 } } }).then(function(max) {
  // 会返回 10
})

min - 查找指定表中最小值

// 数据库中有3条记录,年龄分别是 10, 5, 40
Project.min('age').then(function(min) {
  // 会返回 5
})
Project.min('age', { where: { age: { $gt: 5 } } }).then(function(min) {
  // 会返回 10
})

sum - 对指定属性求和

// 数据库中有3条记录,年龄分别是 10, 5, 40
Project.sum('age').then(function(sum) {
  // 会返回 55
})
Project.sum('age', { where: { age: { $gt: 5 } } }).then(function(sum) {
  // 会返回 50
})

基础的语法差不多这些


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
30天前
|
SQL 运维 关系型数据库
MySQL 中 GRANT 操作会引起复制中断吗?
GRANT 操作并不是一个原子性操作,不管执行成功与否,都会触发一个隐式重载授权表的行为。 在生产环境中需要规范用户创建及授权的操作,不推荐使用 DML 语句去直接变更 mysql.user 表,可能会引发其他的问题,若使用了 DML 语句进行变更, 需要手工执行 flush privileges。
41 4
|
21天前
|
JavaScript 关系型数据库 MySQL
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
创建nodejs项目并接入mysql,完成用户相关的增删改查的详细操作
33 0
|
3天前
|
存储 关系型数据库 MySQL
mysql中的left join、right join 、inner join的详细用法
【8月更文挑战第16天】在MySQL中,`INNER JOIN`、`LEFT JOIN`与`RIGHT JOIN`用于连接多表。`INNER JOIN`仅返回两表中匹配的行;`LEFT JOIN`保证左表所有行出现于结果中,右表无匹配时以NULL填充;`RIGHT JOIN`则相反,保证右表所有行出现于结果中。例如,查询学生及其成绩时,`INNER JOIN`仅显示有成绩的学生;`LEFT JOIN`显示所有学生及他们对应的成绩,无成绩者成绩列为空;`RIGHT JOIN`显示所有成绩及对应学生信息,无学生信息的成绩条目则为空。
|
1月前
|
存储 JSON 关系型数据库
mysql中find_in_set()函数用法详解及增强函数
总结而言,`FIND_IN_SET()`是MySQL中处理由逗号分隔的字符串列表的一种便捷方法,尤其适用于列表相对较短且不经常更改的场景。然而,对于更为复杂的需要高性能和可扩展性的数据库设计,它可能不是最优选择,应考虑使用更加正规化的数据库结构。
55 2
mysql中find_in_set()函数用法详解及增强函数
|
26天前
|
存储 关系型数据库 文件存储
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
面试题MySQL问题之简单的SELECT操作在MVCC下加锁如何解决
31 2
|
1月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版操作报错合集之从mysql读数据写到hive报错,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
1月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之整库同步mysql到starRock提交任务异常,该如何处理
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
29天前
|
SQL Java 数据库
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
MySQL设计规约问题之为什么应尽量避免使用子查询,而可以考虑将其优化为join操作
|
1月前
|
分布式计算 DataWorks 关系型数据库
MaxCompute操作报错合集之配置mysql数据源querysql模式,同步到MC时遇到报错,该怎么处理
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。