parent
97484744a7
commit
247c6591fa
|
@ -1,3 +1,12 @@
|
||||||
|
# 3.0.7 / 2019-09-19
|
||||||
|
* 修复tableCreate在没有索引时建表失败的bug
|
||||||
|
* 更新文档
|
||||||
|
|
||||||
|
|
||||||
|
# 3.0.6 / 2019-03-12
|
||||||
|
* 修改默认编码为 utf8mb4
|
||||||
|
|
||||||
|
|
||||||
# 3.0.5 / 2018-07-17
|
# 3.0.5 / 2018-07-17
|
||||||
* 修复join方法一处的笔误
|
* 修复join方法一处的笔误
|
||||||
|
|
||||||
|
|
89
docs/3.x.md
89
docs/3.x.md
|
@ -12,7 +12,7 @@ let conn = new Mysqli({
|
||||||
post: 3306, //端口, 默认 3306
|
post: 3306, //端口, 默认 3306
|
||||||
user: '', //用户名
|
user: '', //用户名
|
||||||
passwd: '', //密码
|
passwd: '', //密码
|
||||||
charset: '', // 数据库编码,默认 utf8 【可选】
|
charset: '', // 数据库编码,默认 utf8mb4 【可选】
|
||||||
db: '' // 可指定数据库,也可以不指定 【可选】
|
db: '' // 可指定数据库,也可以不指定 【可选】
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ let conn = new Mysqli([
|
||||||
|
|
||||||
### emit([slave], [db])
|
### emit([slave], [db])
|
||||||
|
|
||||||
* slave <Boolean> [可选]是否"从库", 默认为 false,
|
* slave `<Boolean>` [可选]是否"从库", 默认为 false,
|
||||||
* db <String> [可选]要连接的数据库名, 默认为空
|
* db `<String>` [可选]要连接的数据库名, 默认为空
|
||||||
|
|
||||||
> 返回一个 db 实例, 这个方法是必须要的, 所有的 sql 操作,都要先实例一个 db 对象。
|
> 返回一个 db 实例, 这个方法是必须要的, 所有的 sql 操作,都要先实例一个 db 对象。
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@ db
|
||||||
|
|
||||||
### query(sql)
|
### query(sql)
|
||||||
|
|
||||||
* sql <String> sql 语句, [必传]
|
* sql `<String>` sql 语句, [必传]
|
||||||
|
|
||||||
> 直接执行 sql 语句, 用于在内置的 API 不满足需求的情况下, 可以自己手写 sql 执行。
|
> 直接执行 sql 语句, 用于在内置的 API 不满足需求的情况下, 可以自己手写 sql 执行。
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ db.query('select * from `test`.`student` limit 10').then(result => {
|
||||||
|
|
||||||
### drop(db)
|
### drop(db)
|
||||||
|
|
||||||
* db <String> [可选] 要删除 db 名, 不传则删除当前连接的数据库
|
* db `<String>` [可选] 要删除 db 名, 不传则删除当前连接的数据库
|
||||||
|
|
||||||
> 删除当前或指定数据库。
|
> 删除当前或指定数据库。
|
||||||
|
|
||||||
|
@ -107,35 +107,35 @@ db.tableList().then(list => {
|
||||||
|
|
||||||
### dbCreate(name, options)
|
### dbCreate(name, options)
|
||||||
|
|
||||||
* name <String> [必传], 数据库名字
|
* name `<String>` [必传], 数据库名字
|
||||||
* options <Object>, [必传], 数据库的配置
|
* options `<Object>`, [必传], 数据库的配置
|
||||||
- charset <String> 默认 utf8
|
- charset `<String>` 默认 utf8mb4
|
||||||
|
|
||||||
|
|
||||||
> 创建新的数据库, 成功返回true。
|
> 创建新的数据库, 成功返回true。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
db.dbCreate('foo', { charset: 'utf8mb4' }) // 默认是utf8
|
db.dbCreate('foo', { charset: 'utf8' }) // 默认是utf8mb4
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### tableCreate(name, columns ,options)
|
### tableCreate(name, columns ,options)
|
||||||
|
|
||||||
* name <String> [必传], 表名字
|
* name `<String>` [必传], 表名字
|
||||||
* columns <Array>, [必传], 表字段的配置
|
* columns `<Array>`, [必传], 表字段的配置
|
||||||
- name <String> 字段名, 区分大小写, 建议全小写+下划线
|
- name `<String>` 字段名, 区分大小写, 建议全小写+下划线
|
||||||
- type <String> 字段类型, 不区分大小写
|
- type `<String>` 字段类型, 不区分大小写
|
||||||
- primary <Boolean> 是否主键(有且只能有 1 个主键)
|
- primary `<Boolean>` 是否主键(有且只能有 1 个主键)
|
||||||
- inc <Boolean> 是否自增(只允许主键设置,且为整型时才可设置)
|
- inc `<Boolean>` 是否自增(只允许主键设置,且为整型时才可设置)
|
||||||
- notnull <Boolean> 是否允许非空
|
- notnull `<Boolean>` 是否允许非空
|
||||||
- index <Boolean> 是否设为索引
|
- index `<Boolean>` 是否设为索引
|
||||||
- unique <Boolean> 是否为 唯一索引
|
- unique `<Boolean>` 是否为 唯一索引
|
||||||
- default <Any> 设置默认值
|
- default `<Any>` 设置默认值
|
||||||
- update <Boolean> 是否自动更新(只有 datetime & timestamp 可以设)
|
- update `<Boolean>` 是否自动更新(只有 datetime & timestamp 可以设)
|
||||||
* options <Object>, [必传], 表的配置
|
* options `<Object>`, [必传], 表的配置
|
||||||
- charset <String> 默认 utf8
|
- charset `<String>` 默认 utf8mb4
|
||||||
- engine <String> 默认 InnoDB
|
- engine `<String>` 默认 InnoDB
|
||||||
|
|
||||||
|
|
||||||
> 创建新的数据表, 成功返回true。
|
> 创建新的数据表, 成功返回true。
|
||||||
|
@ -164,8 +164,7 @@ db.tableCreate('student',
|
||||||
index: true
|
index: true
|
||||||
},
|
},
|
||||||
...
|
...
|
||||||
]
|
])
|
||||||
{charset: 'utf8mb4'}) // 默认是utf8
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
@ -174,7 +173,7 @@ db.tableCreate('student',
|
||||||
|
|
||||||
### table(name)
|
### table(name)
|
||||||
|
|
||||||
* name <String> [必传], 数据表名字
|
* name `<String>` [必传], 数据表名字
|
||||||
|
|
||||||
> 选择指定表。 返回一个表操作的 API 实例
|
> 选择指定表。 返回一个表操作的 API 实例
|
||||||
|
|
||||||
|
@ -192,9 +191,9 @@ let table = db.table('student') //
|
||||||
|
|
||||||
### leftJoin(tables)
|
### leftJoin(tables)
|
||||||
|
|
||||||
* tables <Array> 左联, 可以联多个表
|
* tables `<Array>` 左联, 可以联多个表
|
||||||
- table <String> 表名
|
- table `<String>` 表名
|
||||||
- on <String> 左联的条件
|
- on `<String>` 左联的条件
|
||||||
|
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
|
@ -222,7 +221,7 @@ db.table('student')
|
||||||
|
|
||||||
|
|
||||||
### filter(options)
|
### filter(options)
|
||||||
* options <Object>
|
* options `<Object>`
|
||||||
|
|
||||||
> 查询过滤, 这个方法是增删改查中使用率最高的。 也是 Mysqli 模块的核心方法之一。也是参数最复杂的方法, 一条查询里, 只能出现一次 filter, 多次调用, 会覆盖之前的条件.
|
> 查询过滤, 这个方法是增删改查中使用率最高的。 也是 Mysqli 模块的核心方法之一。也是参数最复杂的方法, 一条查询里, 只能出现一次 filter, 多次调用, 会覆盖之前的条件.
|
||||||
> options 里有几个特殊的关键字
|
> options 里有几个特殊的关键字
|
||||||
|
@ -294,7 +293,7 @@ db
|
||||||
|
|
||||||
|
|
||||||
### sort(keys)
|
### sort(keys)
|
||||||
* keys <Object>
|
* keys `<Object>`
|
||||||
|
|
||||||
> 对结果集排序
|
> 对结果集排序
|
||||||
|
|
||||||
|
@ -316,7 +315,7 @@ db
|
||||||
|
|
||||||
### skip(num)
|
### skip(num)
|
||||||
|
|
||||||
* num <Number>
|
* num `<Number>`
|
||||||
|
|
||||||
> 跳过指定条数, 可用于分页。
|
> 跳过指定条数, 可用于分页。
|
||||||
|
|
||||||
|
@ -331,7 +330,7 @@ db.table('student').skip(10) // 跳过前9条, 即从第10条结果开始返回
|
||||||
|
|
||||||
### limit(num)
|
### limit(num)
|
||||||
|
|
||||||
* num <Number>
|
* num `<Number>`
|
||||||
|
|
||||||
> 限制返回的结果总数, 做分页时, 配合 skip 方法使用。
|
> 限制返回的结果总数, 做分页时, 配合 skip 方法使用。
|
||||||
|
|
||||||
|
@ -347,8 +346,8 @@ db.table('student').limit(10) // 限制只返回10条记录
|
||||||
|
|
||||||
### slice(start, end)
|
### slice(start, end)
|
||||||
|
|
||||||
* start <Number>
|
* start `<Number>`
|
||||||
* end <Number>
|
* end `<Number>`
|
||||||
|
|
||||||
> 截取指定范围的结果集, 这是 skip & limit 结合体。
|
> 截取指定范围的结果集, 这是 skip & limit 结合体。
|
||||||
|
|
||||||
|
@ -369,7 +368,7 @@ db
|
||||||
|
|
||||||
### withFields(fields)
|
### withFields(fields)
|
||||||
|
|
||||||
* fields <Array> [可选], 不传则返回所有的字段
|
* fields `<Array>` [可选], 不传则返回所有的字段
|
||||||
|
|
||||||
> 指定要返回的字段
|
> 指定要返回的字段
|
||||||
|
|
||||||
|
@ -382,7 +381,7 @@ db.table('student').withFields(['id', 'name', 'sex']) // 只取 学号,姓名,
|
||||||
|
|
||||||
### getAll([ids])
|
### getAll([ids])
|
||||||
|
|
||||||
* ids <Array> [可选],返回指定 id 的结果集; 不传则返回所有结果集。(仅当没有调用过 filter 的情况下,本参数才有效)
|
* ids `<Array>` [可选],返回指定 id 的结果集; 不传则返回所有结果集。(仅当没有调用过 filter 的情况下,本参数才有效)
|
||||||
|
|
||||||
> 返回符合条件的所有记录, 这个方法是 查询必须要调用的方法之一, 上面 .filter, .sort 等方法, 只是组件条件, 并不会返回结果, 只有调用了 getAll/get 之后, 才会返回结果集。
|
> 返回符合条件的所有记录, 这个方法是 查询必须要调用的方法之一, 上面 .filter, .sort 等方法, 只是组件条件, 并不会返回结果, 只有调用了 getAll/get 之后, 才会返回结果集。
|
||||||
> `这里有一个地方要注意的, 传入的参数ids, 即意味着, 该数据表里, 必须有一个字段为"id", 否则会出错, 没有id的表, 查询时请使用 .filter过滤。`
|
> `这里有一个地方要注意的, 传入的参数ids, 即意味着, 该数据表里, 必须有一个字段为"id", 否则会出错, 没有id的表, 查询时请使用 .filter过滤。`
|
||||||
|
@ -425,7 +424,7 @@ db
|
||||||
|
|
||||||
### get(id)
|
### get(id)
|
||||||
|
|
||||||
* id <Any> [可选], 传入单个 ID。
|
* id `<Any>` [可选], 传入单个 ID。
|
||||||
|
|
||||||
> 该方法是对 getAll 的补充, 它最终是调用 getAll 来实现, 目的在于返回 单个结果集(不是数组)。
|
> 该方法是对 getAll 的补充, 它最终是调用 getAll 来实现, 目的在于返回 单个结果集(不是数组)。
|
||||||
|
|
||||||
|
@ -473,7 +472,7 @@ db
|
||||||
|
|
||||||
|
|
||||||
### insert(doc)
|
### insert(doc)
|
||||||
* doc <Object> 要插入的记录
|
* doc `<Object>` 要插入的记录
|
||||||
|
|
||||||
> 用于插入单条记录。如果有自增ID的话, 将返回刚插入的记录的自增ID。
|
> 用于插入单条记录。如果有自增ID的话, 将返回刚插入的记录的自增ID。
|
||||||
|
|
||||||
|
@ -494,7 +493,7 @@ db
|
||||||
|
|
||||||
|
|
||||||
### update(doc)
|
### update(doc)
|
||||||
* doc <Object> 要插入的记录
|
* doc `<Object>` 要插入的记录
|
||||||
|
|
||||||
> 用于更新指定条件的记录, 返回成功修改的总数
|
> 用于更新指定条件的记录, 返回成功修改的总数
|
||||||
|
|
||||||
|
@ -579,7 +578,7 @@ db
|
||||||
|
|
||||||
|
|
||||||
### indexDrop(name)
|
### indexDrop(name)
|
||||||
* name <String> 索引名
|
* name `<String>` 索引名
|
||||||
|
|
||||||
> 删除当前表的指定索引. 成功返回true。
|
> 删除当前表的指定索引. 成功返回true。
|
||||||
|
|
||||||
|
@ -596,10 +595,10 @@ db
|
||||||
|
|
||||||
|
|
||||||
### indexDrop(name, options)
|
### indexDrop(name, options)
|
||||||
* name <String> 索引名
|
* name `<String>` 索引名
|
||||||
* options <Object> 索引的配置
|
* options `<Object>` 索引的配置
|
||||||
- field <String> 该索引绑定的字段
|
- field `<String>` 该索引绑定的字段
|
||||||
- unique <Bollean> 是否是唯一索引
|
- unique `<Bollean>` 是否是唯一索引
|
||||||
|
|
||||||
|
|
||||||
> 给当前表创建索引. 成功返回true。
|
> 给当前表创建索引. 成功返回true。
|
||||||
|
|
|
@ -124,7 +124,7 @@ class Api {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建新的数据库
|
// 创建新的数据库
|
||||||
dbCreate(name, { charset = 'utf8' }) {
|
dbCreate(name, { charset = 'utf8mb4' }) {
|
||||||
if (!name) {
|
if (!name) {
|
||||||
return Promise.reject('Empty database name.')
|
return Promise.reject('Empty database name.')
|
||||||
}
|
}
|
||||||
|
@ -146,7 +146,7 @@ class Api {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 创建新的表,
|
// 创建新的表,
|
||||||
tableCreate(name, fields, { charset = 'utf8', engine = 'InnoDB' }) {
|
tableCreate(name, fields, { charset = 'utf8mb4', engine = 'InnoDB' }) {
|
||||||
if (!name) {
|
if (!name) {
|
||||||
return Promise.reject('Empty database name.')
|
return Promise.reject('Empty database name.')
|
||||||
}
|
}
|
||||||
|
|
12
lib/utils.js
12
lib/utils.js
|
@ -229,7 +229,7 @@ const parser = {
|
||||||
let defaultVal = ''
|
let defaultVal = ''
|
||||||
// 只处理1个主键, 其他的忽略, 且作为主键,必须 NOT NULL
|
// 只处理1个主键, 其他的忽略, 且作为主键,必须 NOT NULL
|
||||||
if (!primary && it.primary) {
|
if (!primary && it.primary) {
|
||||||
primary = `PRIMARY KEY (\`${it.name}\`),\n`
|
primary = `PRIMARY KEY (\`${it.name}\`)`
|
||||||
it.notnull = true
|
it.notnull = true
|
||||||
if (it.inc) {
|
if (it.inc) {
|
||||||
inc = 'AUTO_INCREMENT'
|
inc = 'AUTO_INCREMENT'
|
||||||
|
@ -272,15 +272,17 @@ const parser = {
|
||||||
indexes.push(idx)
|
indexes.push(idx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sql += `\`${it.name}\` ${
|
sql += `\`${it.name}\` ${it.type} ${notnull} ${defaultVal} ${inc} ${autoUpdate},\n`
|
||||||
it.type
|
|
||||||
} ${notnull} ${defaultVal} ${inc} ${autoUpdate},\n`
|
|
||||||
}
|
}
|
||||||
if (!primary) {
|
if (!primary) {
|
||||||
throw new Error('Can not create table without primary key.')
|
throw new Error('Can not create table without primary key.')
|
||||||
}
|
}
|
||||||
sql += primary
|
sql += primary
|
||||||
sql += indexes.join(', \n') + ')'
|
if (indexes.length) {
|
||||||
|
sql += indexes.join(', \n') + ')'
|
||||||
|
} else {
|
||||||
|
sql += '\n)'
|
||||||
|
}
|
||||||
return sql
|
return sql
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "mysqli",
|
"name": "mysqli",
|
||||||
"version": "3.0.6",
|
"version": "3.0.7",
|
||||||
"description": "MySQL tool",
|
"description": "MySQL tool",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
Loading…
Reference in New Issue