From 247c6591fa76ac19bd1accb326cfab57787e75a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=87=E5=A4=A9?= Date: Thu, 19 Sep 2019 15:19:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D0=E7=B4=A2=E5=BC=95=E6=97=B6?= =?UTF-8?q?=E5=BB=BA=E8=A1=A8=E5=A4=B1=E8=B4=A5=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History.md | 9 ++++++ docs/3.x.md | 89 ++++++++++++++++++++++++++-------------------------- lib/api.js | 4 +-- lib/utils.js | 12 ++++--- package.json | 2 +- 5 files changed, 63 insertions(+), 53 deletions(-) diff --git a/History.md b/History.md index dc106ba..7261408 100644 --- a/History.md +++ b/History.md @@ -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 * 修复join方法一处的笔误 diff --git a/docs/3.x.md b/docs/3.x.md index cf42661..4c13371 100644 --- a/docs/3.x.md +++ b/docs/3.x.md @@ -12,7 +12,7 @@ let conn = new Mysqli({ post: 3306, //端口, 默认 3306 user: '', //用户名 passwd: '', //密码 - charset: '', // 数据库编码,默认 utf8 【可选】 + charset: '', // 数据库编码,默认 utf8mb4 【可选】 db: '' // 可指定数据库,也可以不指定 【可选】 }) @@ -34,8 +34,8 @@ let conn = new Mysqli([ ### emit([slave], [db]) -* slave [可选]是否"从库", 默认为 false, -* db [可选]要连接的数据库名, 默认为空 +* slave `` [可选]是否"从库", 默认为 false, +* db `` [可选]要连接的数据库名, 默认为空 > 返回一个 db 实例, 这个方法是必须要的, 所有的 sql 操作,都要先实例一个 db 对象。 @@ -57,7 +57,7 @@ db ### query(sql) -* sql sql 语句, [必传] +* sql `` sql 语句, [必传] > 直接执行 sql 语句, 用于在内置的 API 不满足需求的情况下, 可以自己手写 sql 执行。 @@ -74,7 +74,7 @@ db.query('select * from `test`.`student` limit 10').then(result => { ### drop(db) -* db [可选] 要删除 db 名, 不传则删除当前连接的数据库 +* db `` [可选] 要删除 db 名, 不传则删除当前连接的数据库 > 删除当前或指定数据库。 @@ -107,35 +107,35 @@ db.tableList().then(list => { ### dbCreate(name, options) -* name [必传], 数据库名字 -* options , [必传], 数据库的配置 - - charset 默认 utf8 +* name `` [必传], 数据库名字 +* options ``, [必传], 数据库的配置 + - charset `` 默认 utf8mb4 > 创建新的数据库, 成功返回true。 ```javascript -db.dbCreate('foo', { charset: 'utf8mb4' }) // 默认是utf8 +db.dbCreate('foo', { charset: 'utf8' }) // 默认是utf8mb4 ``` ### tableCreate(name, columns ,options) -* name [必传], 表名字 -* columns , [必传], 表字段的配置 - - name 字段名, 区分大小写, 建议全小写+下划线 - - type 字段类型, 不区分大小写 - - primary 是否主键(有且只能有 1 个主键) - - inc 是否自增(只允许主键设置,且为整型时才可设置) - - notnull 是否允许非空 - - index 是否设为索引 - - unique 是否为 唯一索引 - - default 设置默认值 - - update 是否自动更新(只有 datetime & timestamp 可以设) -* options , [必传], 表的配置 - - charset 默认 utf8 - - engine 默认 InnoDB +* name `` [必传], 表名字 +* columns ``, [必传], 表字段的配置 + - name `` 字段名, 区分大小写, 建议全小写+下划线 + - type `` 字段类型, 不区分大小写 + - primary `` 是否主键(有且只能有 1 个主键) + - inc `` 是否自增(只允许主键设置,且为整型时才可设置) + - notnull `` 是否允许非空 + - index `` 是否设为索引 + - unique `` 是否为 唯一索引 + - default `` 设置默认值 + - update `` 是否自动更新(只有 datetime & timestamp 可以设) +* options ``, [必传], 表的配置 + - charset `` 默认 utf8mb4 + - engine `` 默认 InnoDB > 创建新的数据表, 成功返回true。 @@ -164,8 +164,7 @@ db.tableCreate('student', index: true }, ... - ] - {charset: 'utf8mb4'}) // 默认是utf8 + ]) ``` @@ -174,7 +173,7 @@ db.tableCreate('student', ### table(name) -* name [必传], 数据表名字 +* name `` [必传], 数据表名字 > 选择指定表。 返回一个表操作的 API 实例 @@ -192,9 +191,9 @@ let table = db.table('student') // ### leftJoin(tables) -* tables 左联, 可以联多个表 - - table 表名 - - on 左联的条件 +* tables `` 左联, 可以联多个表 + - table `` 表名 + - on `` 左联的条件 ```javascript @@ -222,7 +221,7 @@ db.table('student') ### filter(options) -* options +* options `` > 查询过滤, 这个方法是增删改查中使用率最高的。 也是 Mysqli 模块的核心方法之一。也是参数最复杂的方法, 一条查询里, 只能出现一次 filter, 多次调用, 会覆盖之前的条件. > options 里有几个特殊的关键字 @@ -294,7 +293,7 @@ db ### sort(keys) -* keys +* keys `` > 对结果集排序 @@ -316,7 +315,7 @@ db ### skip(num) -* num +* num `` > 跳过指定条数, 可用于分页。 @@ -331,7 +330,7 @@ db.table('student').skip(10) // 跳过前9条, 即从第10条结果开始返回 ### limit(num) -* num +* num `` > 限制返回的结果总数, 做分页时, 配合 skip 方法使用。 @@ -347,8 +346,8 @@ db.table('student').limit(10) // 限制只返回10条记录 ### slice(start, end) -* start -* end +* start `` +* end `` > 截取指定范围的结果集, 这是 skip & limit 结合体。 @@ -369,7 +368,7 @@ db ### withFields(fields) -* fields [可选], 不传则返回所有的字段 +* fields `` [可选], 不传则返回所有的字段 > 指定要返回的字段 @@ -382,7 +381,7 @@ db.table('student').withFields(['id', 'name', 'sex']) // 只取 学号,姓名, ### getAll([ids]) -* ids [可选],返回指定 id 的结果集; 不传则返回所有结果集。(仅当没有调用过 filter 的情况下,本参数才有效) +* ids `` [可选],返回指定 id 的结果集; 不传则返回所有结果集。(仅当没有调用过 filter 的情况下,本参数才有效) > 返回符合条件的所有记录, 这个方法是 查询必须要调用的方法之一, 上面 .filter, .sort 等方法, 只是组件条件, 并不会返回结果, 只有调用了 getAll/get 之后, 才会返回结果集。 > `这里有一个地方要注意的, 传入的参数ids, 即意味着, 该数据表里, 必须有一个字段为"id", 否则会出错, 没有id的表, 查询时请使用 .filter过滤。` @@ -425,7 +424,7 @@ db ### get(id) -* id [可选], 传入单个 ID。 +* id `` [可选], 传入单个 ID。 > 该方法是对 getAll 的补充, 它最终是调用 getAll 来实现, 目的在于返回 单个结果集(不是数组)。 @@ -473,7 +472,7 @@ db ### insert(doc) -* doc 要插入的记录 +* doc `` 要插入的记录 > 用于插入单条记录。如果有自增ID的话, 将返回刚插入的记录的自增ID。 @@ -494,7 +493,7 @@ db ### update(doc) -* doc 要插入的记录 +* doc `` 要插入的记录 > 用于更新指定条件的记录, 返回成功修改的总数 @@ -579,7 +578,7 @@ db ### indexDrop(name) -* name 索引名 +* name `` 索引名 > 删除当前表的指定索引. 成功返回true。 @@ -596,10 +595,10 @@ db ### indexDrop(name, options) -* name 索引名 -* options 索引的配置 - - field 该索引绑定的字段 - - unique 是否是唯一索引 +* name `` 索引名 +* options `` 索引的配置 + - field `` 该索引绑定的字段 + - unique `` 是否是唯一索引 > 给当前表创建索引. 成功返回true。 diff --git a/lib/api.js b/lib/api.js index 753e728..adb8a0a 100644 --- a/lib/api.js +++ b/lib/api.js @@ -124,7 +124,7 @@ class Api { } // 创建新的数据库 - dbCreate(name, { charset = 'utf8' }) { + dbCreate(name, { charset = 'utf8mb4' }) { if (!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) { return Promise.reject('Empty database name.') } diff --git a/lib/utils.js b/lib/utils.js index ff8df2e..c30463b 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -229,7 +229,7 @@ const parser = { let defaultVal = '' // 只处理1个主键, 其他的忽略, 且作为主键,必须 NOT NULL if (!primary && it.primary) { - primary = `PRIMARY KEY (\`${it.name}\`),\n` + primary = `PRIMARY KEY (\`${it.name}\`)` it.notnull = true if (it.inc) { inc = 'AUTO_INCREMENT' @@ -272,15 +272,17 @@ const parser = { indexes.push(idx) } } - sql += `\`${it.name}\` ${ - it.type - } ${notnull} ${defaultVal} ${inc} ${autoUpdate},\n` + sql += `\`${it.name}\` ${it.type} ${notnull} ${defaultVal} ${inc} ${autoUpdate},\n` } if (!primary) { throw new Error('Can not create table without primary key.') } sql += primary - sql += indexes.join(', \n') + ')' + if (indexes.length) { + sql += indexes.join(', \n') + ')' + } else { + sql += '\n)' + } return sql } } diff --git a/package.json b/package.json index e35b6ad..79bda6a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mysqli", - "version": "3.0.6", + "version": "3.0.7", "description": "MySQL tool", "main": "index.js", "dependencies": {