SQL逻辑查询语句执行顺序

转载自 SQL逻辑查询语句执行顺序 - by 果冻想

测试表结构:👇

1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE table1
(
customer_id VARCHAR(10) NOT NULL,
city VARCHAR(10) NOT NULL,
PRIMARY KEY(customer_id)
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

CREATE TABLE table2
(
order_id INT NOT NULL auto_increment,
customer_id VARCHAR(10),
PRIMARY KEY(order_id)
)ENGINE=INNODB DEFAULT CHARSET=UTF8;

测试数据:👇

阅读全文 »

2017_12-第三周

const关键字

const:此声明创建一个常量,其作用域可以是全局或本地声明的块。 与var变量不同,全局常量不会变为窗口对象(widows)的属性。需要一个常数的初始化器;也就是说,您必须在声明的同一语句中指定它的值(这是有道理的,因为以后不能更改)。

const声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。例如,在引用内容是对象的情况下,这意味着可以改变对象的内容(例如,其参数)。^1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// 注意: 常量在声明的时候可以使用大小写,但通常情况下全部用大写字母。 

// 定义常量MY_FAV并赋值7
const MY_FAV = 7;

// 报错
MY_FAV = 20;

// 输出 7
console.log("my favorite number is: " + MY_FAV);

// 尝试重新声明会报错
const MY_FAV = 20;

// MY_FAV 保留给上面的常量,这个操作会失败
var MY_FAV = 20;

// 也会报错
let MY_FAV = 20;

// 注意块范围的性质很重要
if (MY_FAV === 7) {
// 没问题,并且创建了一个块作用域变量 MY_FAV
// (works equally well with let to declare a block scoped non const variable)
let MY_FAV = 20;

// MY_FAV 现在为 20
console.log('my favorite number is ' + MY_FAV);

// 这被提升到全局上下文并引发错误
var MY_FAV = 20;
}

// MY_FAV 依旧为7
console.log("my favorite number is " + MY_FAV);

// 常量要求一个初始值
const FOO; // SyntaxError: missing = in const declaration

// 常量可以定义成对象
const MY_OBJECT = {"key": "value"};

// 重写对象和上面一样会失败
MY_OBJECT = {"OTHER_KEY": "value"};

// 对象属性并不在保护的范围内,下面这个声明会成功执行
MY_OBJECT.key = "otherValue";

// 也可以用来定义数组
const MY_ARRAY = [];
// It's possible to push items into the array
// 可以向数组填充数据
MY_ARRAY.push('A'); // ["A"]
// 但是,将一个新数组赋给变量会引发错误
MY_ARRAY = ['B']
阅读全文 »

JavaScript的变量提升及作用域

JavaScript的语法简直不要太灵活,灵活到导出是坑,甚至有人说JavaScript语言不够成熟。。

Code once,debug everywhere.

下面简单整理下常见的坑坑。

变量提升(hoisting)

阅读全文 »

2017_12-第二周

1
var a = a || {}

👆等价于👇

1
2
3
4
var a;
function(a){
if(a === 0 || a === "" || a === false || a === null || a === undefined) a = {}
}

在之前固有的印象中,逻辑与&&和逻辑或||都是出现在if条件语句中,一般用来做判断条件使用,if()括号中会依据a==1 || b!=1表达式的返回值trueorfalse来做判断。👇

阅读全文 »

Javascript 面向对象编程(一):封装

最近一直在用百度的echarts做图表什么的,在配置项中的option是一个对象,,like this var option = {},,有时需要多个option对象,复制来复制去,也只是复制的变量,指向的还是同一个引用。。得好好学习下,翻来覆去还是阮一峰老师的总结最友好~


原文链接:Javascript 面向对象编程(一):封装 - by 阮一峰

学习Javascript,最难的地方是什么?
我觉得,Object(对象)最难。因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握。
下面就是我的学习笔记,希望对大家学习这个部分有所帮助。我主要参考了以下两本书籍:

阅读全文 »

2017-12-04

  • 幂等idempotent idempotence 是一个数学与计算机学概念,常见于抽象代数中。
    在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现.

  • scaffold 英[ˈskæfəʊld] 美[ˈskæfoʊld]
    n. 脚手架; <史>断头台;
    [例句]Moore ascended the scaffold and addressed the executioner.
    穆尔走上断头台,和刽子手说话。

2017-12-05

  • stumbled 英 [ˈstʌmbl] 美 [ˈstʌmbəl]
    v. (不顺畅地) 说( stumble的过去式和过去分词 ); 跌跌撞撞地走; 绊脚; (说话、演奏等) 出错;
    [例句]She stumbled and fell, scraping her palms and knees.
    她绊了一下摔倒了,手掌和膝盖都蹭破了。

  • *reserved 英[rɪˈzɜ:vd] 美[rɪˈzɜ:rvd]
    adj. 预订的; 矜持的; 储藏着的;
    v. 保留[储备]某物( reserve的过去式);
    [例句]He was unemotional, quite quiet, and reserved
    他感情淡漠,沉默寡言,性格内敛。

  • keyword 关键字
    reserved word 保留字

  • literal 英[ˈlɪtərəl] 美[ˈlɪtərəl]
    adj. 照字面的; 原义的; 逐字的; 平实的,避免夸张;
    n. [印] 错排,文字上的错误;
    [例句]In many cases, the people there are fighting, in a literal sense, for their homes.
    很多情况下,那里的人们是真刀真枪地在为家园而抗争。

  • anonymous 英[əˈnɒnɪməs] 美[əˈnɑ:nɪməs]
    adj. 匿名的; 无名的; 假名的; 没有特色的;
    [例句]You can remain anonymous if you wish
    你愿意的话可以不透露姓名。

2017-12-07

阅读全文 »

立即执行函数表达式(IIFE)

原文:Immediately-Invoked Function Expression (IIFE) by Ben Alman

以防你没有注意到,(事先声明)我是一个对于专业术语有些坚持的人。所以,当我多次听到流行却易产生误解的术语「自执行匿名函数」,最终决定将的想法总结到这篇文章中。

除此之外,为了提供一些更深入更彻底的关于这种模式是如何工作的,事实上我还建议了我们应该怎样称呼这种模式。另外,如果你想跳过这里,你可以直接阅读立即调用函数表达式,但是我建议你读完整篇文章。

你需要知道的是,这篇文章不是想说「我是对了,你是错的」之类的。我发自真心地想帮助人们理解这有点儿复杂的概念,并且我认为使用前后一致的精确术语是有助于人们理解的最简单的方式之一。

阅读全文 »

理解与使用Javascript中的回调函数

有点小感慨

在这不得不提一下Python,在人工智能火起来之前就在断断续续的看教程。现在因为人工智能的原因,更要好好学习一下,,在学习的过程中了,第一次好像明白『函数式编程』到底是怎么一回事儿了。放张图,各位体会下,,👇
编程语言的抽象层次
因为最近工作的原因,先后遇到了几个关于js的问题,没想到需要阅读的Tab页越来越多,需要总结的页是越来越多。这个过程中,没想到朝夕相处的js中也有类似的特性,,比如闭包,之前特地去了解,可还是半知半解,,如今从Python反观js,一下子通透了~哈哈,下面进入正文


Javascript中,函数是第一类对象,这意味着函数可以像对象一样按照第一类管理被使用。既然函数实际上是对象:它们能被“存储”在变量中,能作为函数参数被传递,能在函数中被创建,能从函数中返回。

阅读全文 »

孔雀为什么开屏呢?

好像突然明白了老祖宗强调的『成家立业』,成家在前,立业在后。稳定的伴侣对人类这种有性生殖的动物来说,无疑是重中之重。
宏观一点讲,人的一生可以分为这几个阶段:

  1. 生长发育至性成熟
  2. 寻找配偶
  3. 交配产子
  4. 抚养后代至性成熟

感情稳定的人儿可以将更多的精力放在家庭和事业上。而那些,那些单身呢??不仅需要全局tigger去监听意中人的出现事件,还要轮询这个对象到底是不是意中人。前者是占用的资源是隐性的,是生理驱动的,,后者是显性的,甚至在某一时间段是同步且阻塞的。

试想一下,,你正在工作,忽然后客人来访,余光扫到这个对象,,

阅读全文 »

JavaScript:彻底理解同步、异步和事件循环(Event Loop)

为什么JavaScript是单线程?

JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?

JavaScript的单线程,与它的用途有关。作为浏览器脚本语言,JavaScript的主要用途是与用户互动,以及操作DOM。这决定了它只能是单线程,否则会带来很复杂的同步问题。比如,假定JavaScript同时有两个线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以,渲染DOM的线程和JavaScript执行的线程一定是互斥的。
 
所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变。
为了利用多核CPU的计算能力,HTML5提出Web Worker标准,允许JavaScript脚本创建多个线程,但是子线程完全受主线程控制,且不得操作DOM。所以,这个新标准并没有改变JavaScript单线程的本质。

虽然JS是单线程的但是浏览器的内核是多线程的,在浏览器的内核中不同的异步操作由不同的浏览器内核模块调度执行,异步操作会将相关回调添加到任务队列中。而不同的异步操作添加到任务队列的时机也不同,如 onclick, setTimeout, ajax 处理的方式都不同,这些异步操作是由浏览器内核的 webcore 来执行的,webcore 包含上图中的3种 webAPI,分别是 DOM Binding、network、timer模块。

阅读全文 »
0%