add: Node.js 操作 MySQL 数据库
@ -16,3 +16,13 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- <https://blog.csdn.net/qq_35246620/article/details/77647234>
 | 
					- <https://blog.csdn.net/qq_35246620/article/details/77647234>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### GitHub 引用图片的另一种方式
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					参考链接:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [关于markdown文件插入图片遇到的小问题和解决办法](https://www.cnblogs.com/cxint/p/7200164.html)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -31,7 +31,7 @@
 | 
				
			|||||||
| for循环 | 这个大家都懂| |
 | 
					| for循环 | 这个大家都懂| |
 | 
				
			||||||
| forEach()|和 for循环类似,但需要兼容IE8以上 |forEach() 没有返回值。也就是说,它的返回值是 undefined|
 | 
					| forEach()|和 for循环类似,但需要兼容IE8以上 |forEach() 没有返回值。也就是说,它的返回值是 undefined|
 | 
				
			||||||
| map()| 对原数组中的每一项进行加工,将组成新的数组 | 不会改变原数组 |
 | 
					| map()| 对原数组中的每一项进行加工,将组成新的数组 | 不会改变原数组 |
 | 
				
			||||||
| filter()| 对数组中每一项运行回调函数,该函数返回结果是true的项,将组成新的数组,返回结果为**新的数组**。可以起到过滤的作用| 不会改变原数组|
 | 
					| filter()| 对数组中的每一项运行回调函数,该函数返回结果是true的项,将组成新的数组,返回结果为**新的数组**。可以起到过滤的作用| 不会改变原数组|
 | 
				
			||||||
| every()| 如果有一项返回false,则停止遍历,此方法返回 false | 一假即假。要求每一项都返回true,最终的结果才返回true |
 | 
					| every()| 如果有一项返回false,则停止遍历,此方法返回 false | 一假即假。要求每一项都返回true,最终的结果才返回true |
 | 
				
			||||||
| some()| 只要有一项返回true,则停止遍历,此方法返回true | 一真即真。要求每一项都返回false,最终的结果才返回false|
 | 
					| some()| 只要有一项返回true,则停止遍历,此方法返回true | 一真即真。要求每一项都返回false,最终的结果才返回false|
 | 
				
			||||||
| reduce | 为数组中的每一个元素,依次执行回调函数 |  |
 | 
					| reduce | 为数组中的每一个元素,依次执行回调函数 |  |
 | 
				
			||||||
@ -730,7 +730,7 @@ map的应用场景,主要就是以上两种。
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### filter()
 | 
					### filter()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
解释:对数组中每一项运行回调函数,该函数返回结果是true的项,将组成新的数组(返回值就是这个新的数组)。
 | 
					解释:对数组中的**每一项**运行回调函数,该函数返回结果是true的项,将组成新的数组(返回值就是这个新的数组)。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**举例1**:找出数组 arr1 中大于4的元素,返回一个新的数组。代码如下:
 | 
					**举例1**:找出数组 arr1 中大于4的元素,返回一个新的数组。代码如下:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -667,19 +667,6 @@ npm root -g
 | 
				
			|||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```bash
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
```
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
## 配置 npm 镜像源
 | 
					## 配置 npm 镜像源
 | 
				
			||||||
 | 
					
 | 
				
			||||||
由于 npm 默认的下载地址在国外(npmjs.com),有时候会被墙,导致无法下载或者下载很慢。因此,我们可以尝试切换成,从其他的镜像源下载npm包。
 | 
					由于 npm 默认的下载地址在国外(npmjs.com),有时候会被墙,导致无法下载或者下载很慢。因此,我们可以尝试切换成,从其他的镜像源下载npm包。
 | 
				
			||||||
 | 
				
			|||||||
@ -57,7 +57,7 @@ require 加载第三方包的机制:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
(4)如果一直找到该模块的磁盘根路径都没有找到,则会报错:can not find module xxx。
 | 
					(4)如果一直找到该模块的磁盘根路径都没有找到,则会报错:can not find module xxx。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
**3、自定义模块(module)**:
 | 
					### 3、自定义模块(module):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
 | 
					每个文件就是一个模块,有自己的作用域。在一个文件里面定义的变量、函数、类,都是私有的,对其他文件不可见。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -69,7 +69,9 @@ console.log(example.x); // 5
 | 
				
			|||||||
console.log(example.addX(1)); // 6
 | 
					console.log(example.addX(1)); // 6
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
今天这篇文章,重点讲一下 Node 内置模块中的 **fs 文件处理模块**。
 | 
					## 读取文件
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					今天这篇文章,重点讲一下 Node 内置模块中的 **fs(文件处理模块)**。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
在使用文件模块之前,记得先导入:
 | 
					在使用文件模块之前,记得先导入:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -78,9 +80,7 @@ console.log(example.addX(1)); // 6
 | 
				
			|||||||
const fs = require('fs');
 | 
					const fs = require('fs');
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 文件读取
 | 
					fs 的英文全称是 File System。fs 模块提供了很多 api 方法,我们首先应该学习的方法是**文件读取**。
 | 
				
			||||||
 | 
					 | 
				
			||||||
fs 的英文全称是 File System。fs 模块提供了很多api方法,我们首先应该学习的方法是**文件读取**。
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Node中文件读取的方式主要有以下几种。
 | 
					Node中文件读取的方式主要有以下几种。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -211,9 +211,9 @@ fs模块对文件的几乎所有操作都有同步和异步两种形式。例如
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
- 异步调用会将 读取任务 下达到任务队列,直到任务执行完成才会回调。
 | 
					- 异步调用会将 读取任务 下达到任务队列,直到任务执行完成才会回调。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- 异常处理方面,同步必须使用 try catch 方式,异步可以通过回调函数的第一个参数。【重要】
 | 
					- 异常处理方面:同步必须使用 try catch 方式,异步可以通过回调函数的第一个参数。【重要】
 | 
				
			||||||
 | 
					
 | 
				
			||||||
## 文件写入
 | 
					## 写入文件
 | 
				
			||||||
 | 
					
 | 
				
			||||||
语法格式:
 | 
					语法格式:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -275,6 +275,80 @@ fs.unlink('path/file.txt', (err) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
备注:`fs.unlink()` 不能用于目录。 要删除目录,则使用 `fs.rmdir()`。
 | 
					备注:`fs.unlink()` 不能用于删除目录。 如果要删除目录,可以使用 `fs.rmdir()`。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Buffer
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					通过 Buffer 开辟的内存空间,都是连续的内存空间,所以效率比较高。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码举例1:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 将字符串转成 buffer 对象
 | 
				
			||||||
 | 
					const str = 'qianguyihao';
 | 
				
			||||||
 | 
					let buffer = Buffer.from(str);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log(buffer); // 输出16进制编码
 | 
				
			||||||
 | 
					console.log(buffer.toString()); // 输出字符串:qianguyihao
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码举例2:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					// 从内存中开辟一个新的缓冲区
 | 
				
			||||||
 | 
					let buffer = Buffer.alloc(20);
 | 
				
			||||||
 | 
					buffer[0] = 'a';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log(buffer);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 读取目录
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					语法格式:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					fs.mkdir(path[, options], callback)
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					参数说明:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- path:文件路径。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- options参数可以是:
 | 
				
			||||||
 | 
					    - recursive:是否以递归的方式创建目录,默认为 false。
 | 
				
			||||||
 | 
					    - mode:设置目录权限,默认为 0777。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码举例:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					var fs = require("fs");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log("查看 /tmp 目录");
 | 
				
			||||||
 | 
					fs.readdir("/tmp/",function(err, files){
 | 
				
			||||||
 | 
					   if (err) {
 | 
				
			||||||
 | 
					       return console.error(err);
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					   files.forEach( function (file){
 | 
				
			||||||
 | 
					       console.log( file );
 | 
				
			||||||
 | 
					   });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					其他的还有:(暂略)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 删除目录
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 输入输出
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										142
									
								
								11-Node.js和模块化/04-Node.js内置模块:path路径模块.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,142 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## path 路径模块
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Node.js 通过`path`这个内置模块,提供了一些路径操作的API,具体可以参考官方的api文档。这里列举一些常用的API。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### path.extname() 获取文件/路径的扩展名
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					语法格式:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					 path.extname(myPath);
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码解释:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 获取 `myPath` 这个文件或者路径的扩展名。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- `myPath` 这个参数要求是字符串。如果 `myPath` 不是字符串,则抛出 TypeError。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码举例:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					const path = require('path');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					path.extname('hello.txt'); // 返回 '.txt'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					path.extname('www.qianguyihao.com'); // 返回 '.com'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					path.extname('index.coffee.md');  // 返回 '.md'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					path.extname('index.');  // 返回 '.'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					path.extname('index');  // 返回 ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					path.extname('.index');  // 返回 ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					path.extname('.index.md');  // 返回 '.md'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### path.resolve() 生成完成的绝对路径
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					语法格式:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					path.resolve([...myPaths])
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					解释:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 将路径或路径片段的序列解析为绝对路径。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- 返回的路径是**从右往左**处理,后面的每个 myPath 被依次解析,直到构造出一个完整的绝对路径。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码举例:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					const path = require('path');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let arr1 = ['/foo1/foo2', 'qianguyihao', 'foo3'];
 | 
				
			||||||
 | 
					let result1 = path.resolve(...arr1);
 | 
				
			||||||
 | 
					console.log(result1); // 打印结果:/foo1/foo2/qianguyihao/foo3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let arr2 = ['/foo1/foo2', '/qianguyihao', 'foo3'];
 | 
				
			||||||
 | 
					let result2 = path.resolve(...arr2);
 | 
				
			||||||
 | 
					console.log(result2); // 打印结果:/qianguyihao/foo3
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 几个常见路径
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- `__dirname`:这是一个常量,表示:当前执行文件所在**完整目录**。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- `__filename`:这是一个常量。表示:当前执行文件的**完整目录 + 文件名**。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- `process.cwd`:获取当前执行 Node命令 时的目录名。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码举例:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					console.log(__dirname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log(__filename);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log(process.cwd());
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					运行结果:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					$ node app.js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/Users/smyhvae/qianguyihao
 | 
				
			||||||
 | 
					/Users/smyhvae/qianguyihao/app.js
 | 
				
			||||||
 | 
					/Users/smyhvae/qianguyihao
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### path.join() 将多个路径进行拼接
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					如果是我们手动拼接路径,容易出错。这个时候,可以利用 path.join() 方法将路径进行拼接。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					语法格式:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					path.join([...paths]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					解释:使用平台特定的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码举例:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					const path = require('path');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const result1 = path.join(__dirname, './app.js');
 | 
				
			||||||
 | 
					console.log(result1); // 返回:/Users/smyhvae/qianguyihao/app.js
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const result2 = path.join('/foo1', 'foo2', './foo3');
 | 
				
			||||||
 | 
					console.log(result2); // 返回:/foo1/foo2/foo3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const result3 = path.join('/foo1', 'foo2', '/foo3');
 | 
				
			||||||
 | 
					console.log(result3); // 返回:/foo1/foo2/foo3
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## OS 系统模块
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- os.networkInterfaces() 查看网络地址
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## 我的公众号
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					想学习**代码之外的技能**?不妨关注我的微信公众号:**千古壹号**(id:`qianguyihao`)。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										157
									
								
								11-Node.js和模块化/MySQL数据库常用命令.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,157 @@
 | 
				
			|||||||
 | 
					## MySQL 安装
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### MySQL(Mac版)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 步骤1、下载安装包并安装:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MySQL 下载地址:https://dev.mysql.com/downloads/mysql/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#### 步骤2、配置环境变量
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					打开 `~/.bash_profile` 文件,在文件的末尾,添加如下内容,即可配置环境变量:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					# mysql
 | 
				
			||||||
 | 
					export PATH=${PATH}:/usr/local/mysql/bin
 | 
				
			||||||
 | 
					#快速启动、结束MySQL服务, 可以使用alias命令
 | 
				
			||||||
 | 
					alias mysqlstart='sudo /usr/local/mysql/support-files/mysql.server start'
 | 
				
			||||||
 | 
					alias mysqlstop='sudo /usr/local/mysql/support-files/mysql.server stop'
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					配置好环境变量后,在终端输入 `source ~/.bash_profile` 命令,让配置生效。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					在终端的任何位置,输入如下命令,即可进入 mysql 命令的执行窗口:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					mysql -u root -p
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					参考链接:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- [MySQL安装(Mac版)](https://juejin.im/post/5cc2a52ce51d456e7079f27f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 步骤3、继续配置环境变量
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					在 `~/.bash_profile` 中配置好环境变量后,发现每次重启终端后,配置都会失效,需要重新执行 `source ~/.bash_profile` 命令。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					原因是,zsh加载的是 `~/.zshrc`文件,而 `.zshrc` 文件中并没有定义任务环境变量。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					解决办法:打开 `~/.zshrc` 文件,在文件的末尾,添加如下内容即可:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					source ~/.bash_profile
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					参考链接:<https://blog.csdn.net/science_Lee/article/details/79214127>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Navicat Premium 软件初体验
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Navicat Premium 软件是一种数据库管理的GUI软件,采用可视化的方式来查看和操作数据库,非常方便。支持的数据库有: MySQL、MongoDB、SQL Server、SQLite、Oracle 及 PostgreSQL等。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					安装好 Navicat Premium 软件之后,我们来看看这个软件是怎么用的。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					1、新建连接:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					打开 Navicat Premium 软件,选择菜单栏「文件-新建连接-mysql」,然后选择如下配置,即可在本地新建一个数据库连接:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2、选中连接后,右键新建数据库:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					3、选中数据库之后,新建表 `qiangu_student_table`:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					4、在表中添加字段:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					5、字段建好后,开始在表中插入数据:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## MySQL 的一些简单命令
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					按照上面的操作,通过 Navicat Premium 软件建好数据库之后,我们也可以通过命令行来进行一些常见操作。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					注意,在 Mac 终端执行 sql 命令时,命令的末尾必须加上`;`(英文格式的分号)。效果如下:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					我们也可以在 Navicat Premium 软件中,输入查询命令来查询数据。选择菜单栏「查询->新建查询->输入 sql 命令->运行」即可,效果如下:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MySQL 命令行的一些简单命令如下。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**以 root 身份进入命令行**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					mysql -u root -p
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**查看有哪些数据库**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					show databases
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**选择进入指定的数据库**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					use xxx_database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 举例
 | 
				
			||||||
 | 
					use qiangu_database
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**在当前数据库中,查询指定的表**:(查询全部数据)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					select * from xxx_table
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 举例
 | 
				
			||||||
 | 
					select * from qiangu_student_table
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**删除指定的表**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					drop table xxx
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 举例
 | 
				
			||||||
 | 
					drop table qiangu_student_table
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**删除指定的数据库**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					drop database qiangu_database;
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					**创建一个数据库**:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					create database qiangu2_database;
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										327
									
								
								11-Node.js和模块化/Node.js操作MySQL数据库.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						@ -0,0 +1,327 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					## Node.js 连接 MySQL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(1)安装 mysql 包:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					$ npm install mysql
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(2)引入 mysql 包:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					const mysql = require("mysql");
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(3)建立连接:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					let mysql = require("mysql");
 | 
				
			||||||
 | 
					let options = {
 | 
				
			||||||
 | 
					  host: "localhost",
 | 
				
			||||||
 | 
					  //port:"3306", //可选,默认3306
 | 
				
			||||||
 | 
					  user: "root",
 | 
				
			||||||
 | 
					  password: 'xxx', // 这里改成你自己的数据库连接密码
 | 
				
			||||||
 | 
					  database: "qiangu_database",
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					//创建与数据库进行连接的连接对象
 | 
				
			||||||
 | 
					let connection = mysql.createConnection(options);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//建立连接
 | 
				
			||||||
 | 
					connection.connect((err) => {
 | 
				
			||||||
 | 
					  if (err) {
 | 
				
			||||||
 | 
					    // 数据库连接成功
 | 
				
			||||||
 | 
					    console.log(err);
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    // 数据库连接失败
 | 
				
			||||||
 | 
					    console.log("数据库连接成功");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					正常来说,运行程序后,应该会提示`数据库连接成功`。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					如果在运行时提示错误`Client does not support authentication protocol requested by server`,解决办法如下:(在终端进入 sql 之后,输入如下命令)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					# 注意,这里的 'root' 请填你的user账号, 'localhost' 请填 你的 host, 'password' 请填你的密码
 | 
				
			||||||
 | 
					ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# 然后执行如下命令
 | 
				
			||||||
 | 
					flush privileges;
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Node.js 增删改查 MySQL
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					针对下面这张表:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					通过 Node.js可以对其进行一些增删改查操作。代码举例如下。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 1、查询表
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					let mysql = require('mysql');
 | 
				
			||||||
 | 
					let options = {
 | 
				
			||||||
 | 
					    host: 'localhost',
 | 
				
			||||||
 | 
					    //port:"3306",//可选,默认3306
 | 
				
			||||||
 | 
					    user: 'root',
 | 
				
			||||||
 | 
					    password: 'xxx', // 这里改成你自己的数据库密码
 | 
				
			||||||
 | 
					    database: 'qiangu_database'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					//创建与数据库进行连接的连接对象
 | 
				
			||||||
 | 
					let connection = mysql.createConnection(options);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//建立连接
 | 
				
			||||||
 | 
					connection.connect((err) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        // 数据库连接成功
 | 
				
			||||||
 | 
					        console.log(err)
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 数据库连接失败
 | 
				
			||||||
 | 
					        console.log('数据库连接成功')
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 1、查询表
 | 
				
			||||||
 | 
					let strSql1 = 'select * from qiangu_student_table';
 | 
				
			||||||
 | 
					connection.query(strSql1, (err, result, fields) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        // 表查询失败
 | 
				
			||||||
 | 
					        console.log(err);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 表查询成功
 | 
				
			||||||
 | 
					        console.log('qiangu_student_table 表查询结果:' + JSON.stringify(result));
 | 
				
			||||||
 | 
					        console.log('fields:' + JSON.stringify(fields));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					打印结果如下:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					qiangu_student_table 表查询结果:
 | 
				
			||||||
 | 
					[{"id":1,"name":"千古壹号","age":28},{"id":2,"name":"许嵩","age":34},{"id":3,"name":"邓紫棋","age":28}]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fields:[
 | 
				
			||||||
 | 
					    {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"id","orgName":"id","charsetNr":63,"length":11,"type":3,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true},
 | 
				
			||||||
 | 
					    {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"name","orgName":"name","charsetNr":33,"length":765,"type":253,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true},
 | 
				
			||||||
 | 
					    {"catalog":"def","db":"qiangu_database","table":"qiangu_student_table","orgTable":"qiangu_student_table","name":"age","orgName":"age","charsetNr":63,"length":11,"type":3,"flags":0,"decimals":0,"zeroFill":false,"protocol41":true}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 删除表
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					// 2、删除表
 | 
				
			||||||
 | 
					let strSql2 = 'drop table test2_table';
 | 
				
			||||||
 | 
					connection.query(strSql2, (err, result) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        // 表删除失败
 | 
				
			||||||
 | 
					        console.log(err);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 表删除成功
 | 
				
			||||||
 | 
					        console.log('表删除成功:' + result);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					打印结果:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					表删除成功:
 | 
				
			||||||
 | 
					OkPacket {
 | 
				
			||||||
 | 
					    fieldCount: 0,
 | 
				
			||||||
 | 
					    affectedRows: 0,
 | 
				
			||||||
 | 
					    insertId: 0,
 | 
				
			||||||
 | 
					    serverStatus: 2,
 | 
				
			||||||
 | 
					    warningCount: 0,
 | 
				
			||||||
 | 
					    message: '',
 | 
				
			||||||
 | 
					    protocol41: true,
 | 
				
			||||||
 | 
					    changedRows: 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 删除数据库
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					将上方的sql语句换一下即可:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					let strSql3 = 'drop database qiangu_database';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 2、新建数据库
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					let mysql = require('mysql');
 | 
				
			||||||
 | 
					let options = {
 | 
				
			||||||
 | 
					    host: 'localhost',
 | 
				
			||||||
 | 
					    //port:"3306",//可选,默认3306
 | 
				
			||||||
 | 
					    user: 'root',
 | 
				
			||||||
 | 
					    password: 'smyhvae001',
 | 
				
			||||||
 | 
					    // database: 'qiangu_database'  // 注意,因为代码里是创建新的数据库,所以这里不需要填其他的数据库名
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					//创建与数据库进行连接的连接对象
 | 
				
			||||||
 | 
					let connection = mysql.createConnection(options);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//建立连接
 | 
				
			||||||
 | 
					connection.connect((err) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        // 数据库连接成功
 | 
				
			||||||
 | 
					        console.log(err);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 数据库连接失败
 | 
				
			||||||
 | 
					        console.log('数据库连接成功')
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 创建新的数据库
 | 
				
			||||||
 | 
					const strSql4 = 'create database qiangu_database3';
 | 
				
			||||||
 | 
					connection.query(strSql4, (err, result) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        console.log(err);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        console.log('新建数据库成功:' + JSON.stringify(result));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					打印结果:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					数据库连接成功
 | 
				
			||||||
 | 
					新建数据库成功:{
 | 
				
			||||||
 | 
					    "fieldCount":0,"affectedRows":1,"insertId":0,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 3、新建表
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					新建表的sql语句举例:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```sql
 | 
				
			||||||
 | 
					CREATE TABLE `qiangu_table5` (
 | 
				
			||||||
 | 
					    `id` int NOT NULL AUTO_INCREMENT,
 | 
				
			||||||
 | 
					    `name` varchar(255) DEFAULT NULL,
 | 
				
			||||||
 | 
					    `age` int DEFAULT NULL,
 | 
				
			||||||
 | 
					    PRIMARY KEY (`id`)
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					如果是在 js 代码中执行上面这样命令的话,要记得把 sql 语句存放在字符串里的同一行。
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					代码举例如下:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					let mysql = require('mysql');
 | 
				
			||||||
 | 
					let options = {
 | 
				
			||||||
 | 
					    host: 'localhost',
 | 
				
			||||||
 | 
					    //port:"3306",//可选,默认3306
 | 
				
			||||||
 | 
					    user: 'root',
 | 
				
			||||||
 | 
					    password: 'smyhvae001',
 | 
				
			||||||
 | 
					    database: 'qiangu_database'
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					//创建与数据库进行连接的连接对象
 | 
				
			||||||
 | 
					let connection = mysql.createConnection(options);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//建立连接
 | 
				
			||||||
 | 
					connection.connect((err) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        // 数据库连接成功
 | 
				
			||||||
 | 
					        console.log(err);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 数据库连接失败
 | 
				
			||||||
 | 
					        console.log('数据库连接成功')
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// 新建表
 | 
				
			||||||
 | 
					// 注意,在 js 代码中,sql 语句要存放在字符串里的同一行。
 | 
				
			||||||
 | 
					const strSql5 = 'CREATE TABLE `qianguyihao_table5` (`id` int NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`age` int DEFAULT NULL,PRIMARY KEY (`id`));';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					connection.query(strSql5, (err, result) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        // 新建表失败
 | 
				
			||||||
 | 
					        console.log(err);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 新建表成功
 | 
				
			||||||
 | 
					        console.log('qianguyihao 新建表成功:' + JSON.stringify(result));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					打印结果:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					数据库连接成功
 | 
				
			||||||
 | 
					qianguyihao 新建表成功:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    "fieldCount":0,"affectedRows":0,"insertId":0,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### 在指定的表中插入数据
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					在指定的表中插入数据:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					// 在指定的表中插入数据
 | 
				
			||||||
 | 
					const strSql6 = "insert into qianguyihao_table5 (name, age) values ('千古壹号', '28')";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					connection.query(strSql6, (err, result) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        // 插入数据失败
 | 
				
			||||||
 | 
					        console.log(err);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 在指定的表中插入数据成功
 | 
				
			||||||
 | 
					        console.log('qianguyihao 在指定的表中插入数据成功:' + JSON.stringify(result));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					打印结果:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```bash
 | 
				
			||||||
 | 
					qianguyihao 在指定的表中插入数据成功:
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    "fieldCount":0,"affectedRows":1,"insertId":1,"serverStatus":2,"warningCount":0,"message":"","protocol41":true,"changedRows":0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					如果插入的数据是变量(比如是用户提交上来的数据),那么,sql 语句可以这样写:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```js
 | 
				
			||||||
 | 
					// 在指定的表中插入数据(数据作为变量)
 | 
				
			||||||
 | 
					const strSql7 = "insert into qianguyihao_table5 (name, age) values (?, ?)";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					connection.query(strSql7, ['许嵩', '34'], (err, result) => {
 | 
				
			||||||
 | 
					    if (err) {
 | 
				
			||||||
 | 
					        // 插入数据失败
 | 
				
			||||||
 | 
					        console.log(err);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        // 在指定的表中插入数据成功
 | 
				
			||||||
 | 
					        console.log('qiangauyihao 在指定的表中插入数据成功:' + JSON.stringify(result));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										
											BIN
										
									
								
								img/20200415_1707.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 153 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200415_1708.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 102 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1005.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 41 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1011.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 240 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1014.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 21 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1126.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 262 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1127.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 97 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1138.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 205 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1150.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 232 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1157.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 129 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1159.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 306 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1202.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 226 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200416_1259.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 141 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200417_1700.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 144 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200417_1750.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 231 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								img/20200418_1728.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						| 
		 After Width: | Height: | Size: 251 KiB  |