goodBlog
goodBlog copied to clipboard
我是koala, 公众号【程序员成长指北】的作者, 专注Node.js技术栈分享,从前端到Node.js再到后端数据库,帮您成为优秀的Node.js全栈工程师。和我一起进阶全栈吧!
## 前言: 上一篇讲Mysql基本架构时,以“sql查询语句在MySql架构中具体是怎么执行的?”进行了全面的讲解。知道了sql查询语句在MySql架构中的具体执行流程,但是为了能够更好更快的写出sql语句,我觉得非常有必要知道sql语句中各子句的执行顺序。看过上一篇文章的小伙伴应该都知道,sql语句最后各子句的执行应该是在执行器中完成的,存储引擎对执行器提供的数据读写接口。现在开始我们的学习 ## 语句中各子句完整执行顺序概括(按照顺序号执行) 1. from (注:这里也包括from中的子语句) 2. join 3. on 4. where 5. group by(开始使用select中的别名,后面的语句中都可以使用) 6. avg,sum.... 等聚合函数 7. having 8. select 9. distinct 10. order by 11....
# async和await的讲解 ### 声明async函数的几个方法 //普通的函数声明 ``` async function A(){} ``` //声明一个函数表达式 ``` let A=async function(){} ``` //async形式的箭头函数 ``` let A=async ()=>{} ``` ### 初识async和await async与await实例应用,基础代码 控制器调用与server中查询数据 ``` exports.getBlogList =async (ctx,next)=>{...
## 为什么出现Promise 在javascript开发过程中,代码是单线程执行的,同步操作,彼此之间不会等待,这可以说是它的优势,但是也有它的弊端,如一些网络操作,浏览器事件,文件等操作等,都必须异步执行,针对这些情况,起初的操作都是使用回调函数实现。 实现方式如下(伪代码): ``` function One(callback) { if (success) { callback(err, result); } else { callback(err, null); } } One(function (err, result) { //执行完One函数内的内容,成功的结果回调回来向下执行 }) ``` 上述代码只是一层级回调,如果代码复杂后,会出现多层级的回调,代码可读性也会很差,那有没有一种方式,不用考虑里面的内容,直接根据结果成功还是失败执行下面的代码呢?有的,Promise(承诺),在ES6中对Promise进行了同意的规范。 ## Promise的含义...
(sequelize)bulkCreate函数中的updateOnDuplicate参数怎么使用? ## 前言: Sequelize中提供的增删改查相关的函数都能转成原生的sql语句。本篇文章介绍一个不是很常见但是有时候批量插入很方便的函数——bulkCreate。 ## bulkCreate讲解 #### 官方文档理解 **bulkCreate() - 创建多条记录** ``` bulkCreate(records, [options]) -> Promise. ``` 批量创建并保存多个实例。 处理成功后,会在回调函数中返回一个包含多个实例的数组。 参数 名称 | 类型 | 说明 ---|--- |--- records | Array...
#### 数据库表中sale列的值为23456.789 1. format函数 说明:format(x,d)是mysql自带的格式化小数函数,format()函数会对小数部分进行四舍五入操作,整数部分从右向左每三位一个逗号进行格式化输出 format函数结果: ``` 23,456.79 ``` 2. truncate函数 说明:truncate(x,d)是mysql自带的函数,truncate()函数会将小数部分d位以后的值直接舍去 truncate函数结果: ``` 23456.78 ``` 3. round函数(常用) 说明:round(x,d)是mysql自带的函数,format()函数会对小数部分进行四舍五入操作,但是不会出现format函数中的带逗号格式 round函数数结果: ``` 23456.79 ``` 4. convert函数(常用) 说明:MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。简单的说就是类型转换。 CONVERT(xxx,类型),但是类型是有限制的,下面几种类型 - 二进制,同带binary前缀的效果...
## 前言: 最近写的一个接口需要用到子查询,并且子查询的结果并不是可以在另外一个查询语句中直接当作in的选项,没办法区sequelize官网上看了一下如何直接使用原生语句 ## sequelize文档内容翻译 看一段官网中代码例子,一一说明 ``` //1 sequelize.query('SELECT 1', { logging: console.log, plain: false, raw: false, type: Sequelize.QueryTypes.SELECT }) //2 sequelize .query('SELECT * FROM projects', { raw: true })...
### 报错: 在使用sequelize创建model后,使用model进行findAll查询的时候报错: > Sequelize Unknown column '*.createdAt' in 'field list'? ### 报错原因: 在sequelize中启用了时间戳(即sequelize中创建的model开启了时间戳),但是在数据库中的实际表定义不包含时间戳列。 当你做model.findAll时,会将model中的每一进行别名查询(也包括model中开启的时间戳),从而创建下面例子查询,这面就包含了数据库中实际没有的时间戳列(createdAt,updatedAt): ``` SELECT `users`.*, `userDetails`.`userId` AS `userDetails.userId`,`userDetails`.`firstName` AS `userDetails.firstName`, `userDetails`.`id` AS `userDetails.id`, `userDetails`.`createdAt` AS `userDetails.createdAt`, `userDetails`.`updatedAt`...
## 环境变量 讲config之前,先说一下环境变量这个事。 Linux系统中查看所有环境变量 ```linux env ``` node中常用到的环境变量是NODE_ENV,查看是否存在 ```linux echo $NODE_ENV ``` Linux系统中添加环境变量 ```linux env ``` 某些时候需要删除环境变量 ```linux unset NODE_ENV ``` 环境变量追加值 ```linux export PATH=$PATH:/home/download:/usr/local/ ``` ## config模块包使用 安装 ```linux...
最近写的一个用户数据统计相关接口,需要用到按照每天进行分组统计。 ### 直接看语句 ``` SELECT DATE_FORMAT( create_time, "%Y-%m-%d" ) ,sum(user_id) FROM orders WHERE order_state=2 GROUP BY DATE_FORMAT( create_time, "%Y-%m-%d" ) ; ``` ### DATE_FORMAT函数说明 - 语法 ``` DATE_FORMAT(date,format) //上面代码中使用的是 DATE_FORMAT(...
## 提出问题 ### 问题1: 看一段for循环的代码,大家先想一下执行结果是什么? ``` var arr = [2,4,6,8,10]; var arrLength = arr.length; for (var i = 0; i < arrLength; i++) { setTimeout(function() { console.log(i); console.log(arr[i]); }, 2000);...