Skip to content

Commit

Permalink
update the zh-cn readme.md and example.md 's documentication
Browse files Browse the repository at this point in the history
  • Loading branch information
sydnkj committed Oct 10, 2023
1 parent 26dd7d7 commit 89f4cf1
Show file tree
Hide file tree
Showing 2 changed files with 145 additions and 28 deletions.
115 changes: 115 additions & 0 deletions documentation/zh-cn/Examples.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# 示例

## SELECT 例子

```js
const mysql = require('mysql2');
const connection = mysql.createConnection({user: 'test', database: 'test'});

connection.query('SELECT 1+1 as test1', (err, rows) => {
//
});
```

## 预处理和参数

```js
const mysql = require('mysql2');
const connection = mysql.createConnection({user: 'test', database: 'test'});

connection.execute('SELECT 1+? as test1', [10], (err, rows) => {
//
});
```

## 加密连接

```js
const fs = require('fs');
const mysql = require('mysql2');
const connection = mysql.createConnection({
user: 'test',
database: 'test',
ssl: {
key: fs.readFileSync('./certs/client-key.pem'),
cert: fs.readFileSync('./certs/client-cert.pem')
}
});
connection.query('SELECT 1+1 as test1', console.log);
```

您可以使用“Amazon RDS”字符串作为 ssl 属性的值,以通过 SSL 连接到 Amazon RDS MySQL (在这种情况下下将使用此 http://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem CA 证书)

```js
const mysql = require('mysql2');
const connection = mysql.createConnection({
user: 'foo',
password: 'bar',
host: 'db.id.ap-southeast-2.rds.amazonaws.com',
ssl: 'Amazon RDS'
});

connection.query('show status like \'Ssl_cipher\'', (err, res) => {
console.log(err, res);
connection.end();
});
```


## MySQL代理服务器示例

```js
const mysql = require('mysql2');

const server = mysql.createServer();
server.listen(3307);
server.on('connection', conn => {
console.log('connection');

conn.serverHandshake({
protocolVersion: 10,
serverVersion: 'node.js rocks',
connectionId: 1234,
statusFlags: 2,
characterSet: 8,
capabilityFlags: 0xffffff
});

conn.on('field_list', (table, fields) => {
console.log('field list:', table, fields);
conn.writeEof();
});

const remote = mysql.createConnection({user: 'root', database: 'dbname', host:'server.example.com', password: 'secret'});

conn.on('query', sql => {
console.log(`proxying query: ${sql}`);
remote.query(sql, function (err) {
// 重载函数,也可以使用 (err, result :object)
// 或者 (err, rows :array, columns :array)
if (Array.isArray(arguments[1])) {
// 对'select', 'show' 或类似的内容响应
const rows = arguments[1], columns = arguments[2];
console.log('rows', rows);
console.log('columns', columns);
conn.writeTextResult(rows, columns);
} else {
// 对 'insert', 'update' or 'delete' 进行响应
const result = arguments[1];
console.log('result', result);
conn.writeOk(result);
}
});
});

conn.on('end', remote.end.bind(remote));
});
```

## MySQL 服务器 API 示例

- [MySQL-pg-proxy](https://github.com/sidorares/mysql-pg-proxy) - MySQL ot Postgres proxy server.
- [MySQLite.js](https://github.com/sidorares/mysqlite.js) - MySQL server with JS-only (emscripten compiled) sqlite backend.
- [SQL-engine](https://github.com/eugeneware/sql-engine) - MySQL server with LevelDB backend.
- [MySQL-osquery-proxy](https://github.com/sidorares/mysql-osquery-proxy) - Connect to [facebook osquery](https://osquery.io/) using MySQL client
- [PlyQL](https://github.com/implydata/plyql) - Connect to [Druid](http://druid.io/) using MySQL client
58 changes: 30 additions & 28 deletions documentation/zh-cn/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,16 +14,16 @@
__目录__

- [MySQL2的历史以及选择原因](#MySQL2的历史以及选择原因)
- [MySQL2的历史以及选择原因](#mysql2的历史以及选择原因)
- [安装](#安装)
- [查询数据](#查询数据)
- [SQL预处理的使用](#SQL预处理的使用)
- [SQL预处理的使用](#sql预处理的使用)
- [连接池的使用](#连接池的使用)
- [Promise封装](#Promise封装)
- [Promise封装](#promise封装)
- [结果返回](#结果返回)
- [连接级别](#连接级别)
- [查询级别](#查询级别)
- [API配置项](#API配置项)
- [API配置项](#api配置项)
- [文档](#文档)
- [鸣谢](#鸣谢)
- [贡献](#贡献)
Expand All @@ -43,14 +43,16 @@ MySQL2 大部分 API 与 [mysqljs][node-mysql] 兼容,并支持大部分功能
- 支持压缩
- SSL 和 [Authentication Switch](../en/Authentication-Switch.md)
- [自定义流](../en/Extras.md)
- [连接池](#using-connection-pools)
- [连接池](#连接池的使用)

## 安装

MySQL2 可以跨平台使用,毫无疑问可以安装在 Linux、Mac OS 或 Windows 上。

```bash
npm install --save mysql2
# 你也可以使用yarn管理您的软件包
yarn add mysql2
```

## 查询数据
Expand Down Expand Up @@ -89,7 +91,7 @@ connection.query(

使用 MySQL2,您还可以提前准备好SQL预处理语句。 使用准备好的SQL预处理语句,MySQL 不必每次都为相同的查询做准备,这会带来更好的性能。 如果您不知道为什么它们很重要,请查看这些讨论:

- [如何防止预处理语句SQL注入攻击](http://stackoverflow.com/questions/8263371/how-can-prepared-statements-protect-from-sql-injection-attacks)
- [如何防止预处理语句SQL注入攻击(英语)](http://stackoverflow.com/questions/8263371/how-can-prepared-statements-protect-from-sql-injection-attacks)

MySQL2 提供了 `execute` 辅助函数,它将准备和查询语句。 您还可以使用 `prepare` / `unprepare` 方法手动准备/取消准备。

Expand All @@ -104,16 +106,16 @@ const connection = mysql.createConnection({
database: 'test'
});

// execute 将在内部调用 prepare 和 query
// execute 将在内部调用 prepare 和 query
connection.execute(
'SELECT * FROM `table` WHERE `name` = ? AND `age` > ?',
['Rick C-137', 53],
function(err, results, fields) {
console.log(results); // 结果集
console.log(fields); // 额外元数据(如果有)

// 如果再次执行相同的语句,他将从缓存中选取
// 这能有效的节省准备查询时间获得更好的性能
// 如果再次执行相同的语句,它将从缓存中选取
// 这能有效的节省准备查询时间来获得更好的性能
}
);
```
Expand Down Expand Up @@ -144,19 +146,19 @@ const pool = mysql.createPool({

您可以像直接连接一样使用池(使用 `pool.query()``pool.execute()`):
```js
// For pool initialization, see above
// 有关连接池初始化操作本文不赘述,请看上文
pool.query("SELECT `field` FROM `table`", function(err, rows, fields) {
// Connection is automatically released when query resolves
// 查询结束时自动释放连接
});
```

或者,也可以手动从池中获取连接并稍后返回:
```js
// For pool initialization, see above
// 有关连接池初始化操作本文不赘述,请看上文
pool.getConnection(function(err, conn) {
// Do something with the connection
// 在获取连接后做的任何操作
conn.query(/* ... */);
// Don't forget to release the connection when finished!
// 不要忘记释放连接
pool.releaseConnection(conn);
});
```
Expand All @@ -166,49 +168,49 @@ pool.getConnection(function(err, conn) {
MySQL2 也支持 Promise API。 这与 ES7 异步等待非常有效。
```js
async function main() {
// get the client
// 导入包
const mysql = require('mysql2/promise');
// create the connection
// 创建一个连接
const connection = await mysql.createConnection({host:'localhost', user: 'root', database: 'test'});
// query database
// 查询数据库
const [rows, fields] = await connection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?', ['Morty', 14]);
}
```

MySQL2 使用范围内可用的默认 `Promise` 对象。 但是你可以选择你想使用的 `Promise` 实现。
```js
// get the client
// 导入包
const mysql = require('mysql2/promise');

// get the promise implementation, we will use bluebird
// 获得连接实现, 这里使用 bluebird 实现
const bluebird = require('bluebird');

// create the connection, specify bluebird as Promise
// 创建一个连接,将 bluebir 做为 Promise 实现
const connection = await mysql.createConnection({host:'localhost', user: 'root', database: 'test', Promise: bluebird});

// query database
// 查询数据库
const [rows, fields] = await connection.execute('SELECT * FROM `table` WHERE `name` = ? AND `age` > ?', ['Morty', 14]);
```

MySQL2 还在 Pools 上公开了一个 .promise()函数,因此您可以从同一个池创建一个 promise/non-promise 连接。
```js
async function main() {
// get the client
// 导入包
const mysql = require('mysql2');
// create the pool
// 创建连接池
const pool = mysql.createPool({host:'localhost', user: 'root', database: 'test'});
// now get a Promise wrapped instance of that pool
// 获取该池的 Promise 包装实例
const promisePool = pool.promise();
// query database using promises
// 使用 Promise 获取数据
const [rows,fields] = await promisePool.query("SELECT 1");
}
```

MySQL2 在 Connections 上公开了一个 .promise*()函数,以“升级”现有的 non-promise 连接以使用 Promise。
```js
// get the client
// 导入包
const mysql = require('mysql2');
// create the connection
// 创建一个连接
const con = mysql.createConnection(
{host:'localhost', user: 'root', database: 'test'}
);
Expand Down Expand Up @@ -251,7 +253,7 @@ MySQL2大部分的API与 [Node MySQL][node-mysql] 基本上相同,你应该查

## 文档

你可以在[这里](../en)获得更多的详细文档,并且你应该查阅各种代码[示例](../en/examples)来获得更高级的概念。
你可以在[这里](../en)获得更多的详细文档,并且你应该查阅各种代码[示例](../zh-cn/Examples.md)来获得更高级的概念。

## 鸣谢

Expand Down

0 comments on commit 89f4cf1

Please sign in to comment.