MySQL连接器/ node . js

MySQL Connector/Node.js是MySQL 8的Node.js驱动程序,由Oracle官方支持和维护。的纯JavaScript实现X DevAPI的应用程序编程接口MySQL文档存储通过基于crud的NoSQL操作X协议(它不支持经典的MySQL协议)。

需求

  • MySQL 8.0.11或更高版本
  • Node.js 12.0.0或更高版本

虽然有一些最新的MySQL5.7版本是部分支持的,整个功能集只在最新的8。x版本。

安装

下载和安装直接从npm注册表

$ NPM install @mysql/xdevapi

或者,从官方下载tarball网站在项目根目录下运行以下命令安装包:

$ NPM install /path/to/mysql-connector-nodejs-.tar.gz

概述

MySQL Connector/Node.js允许利用MySQL文档存储和写入无模式数据应用程序或普通的传统relational-flavored应用程序使用流畅的API和集成的小而有表现力的查询语言(用于复杂查询)。除了传统的文档存储功能,MySQL Connector/Node.js还提供了对以下特性的额外支持交易保存点而且行锁

API是完全异步的,使用JavaScript承诺接口的流量控制,这意味着它也可以使用async-await在node . js8.0.0或以上。查看下面的链接来学习如何使用承诺而且async-await在JavaScript和Node.js:

包含整个DML表面和一些DDL表面的数据库操作是使用通过流畅API实现的上下文查询构建器构造的。该API遵循每个官方MySQL连接器上相同的设计规则,并与使用谷歌协议缓冲区开放标准。

API提供了管理数据库的支持会话而且模式,使用文档存储集合以及使用原始SQL语句。

下面是一个使用文档存储的不同类型的CRUD操作的示例:

Const mysqlx = require('@mysql/xdevapi');const config ={集合:'myCollection',模式:'mySchema',用户:'root'};mysqlx。getSession({用户:配置。然后(session => {const schema = session. getschema (config.schema);return schema. existsindatabase () .then(exists => {if (exists) {return schema;}返回session.createSchema (config.schema);}) .then(schema =>{返回schema. createcollection (config. createcollection)。{reuseExisting: true});}) .then(collection =>{返回集合。添加([{名称:“foo”,年龄:42}]). execute()(() = >{返回collection.find () .fields(“名字”,“年龄”). execute (); }) .then(res => { console.log(res.fetchOne()); // { name: 'foo', age: 42 } }) .then(() => { return collection.modify('age = :value') .bind('value', 42) .set('name', 'bar') .execute(); }) .then(() => { return collection.find() .fields('name', 'age') .execute(); }) .then(res => { console.log(res.fetchOne()); // { name: 'bar', age: 42 } }) .then(() => { return collection.remove('true') .execute(); }) .then(() => { return collection.find() .fields('name', 'age') .execute(); }) .then(res => { console.log(res.fetchAll()); // [] }); }) .then(() => { return schema.dropCollection(config.collection); }) .then(() => { return session.dropSchema(config.schema); }) .then(() => { return session.close(); }); });

也可以执行普通的原始SQL语句。事实上,在X DevAPI中目前还没有用于关系DDL操作的方法,这意味着很可能需要一些SQL来处理传统的表和视图。

下面是一个使用关系表的不同类型的CRUD操作的示例:

Const mysqlx = require('@mysql/xdevapi');mysqlx. const config = {schema: 'mySchema', table: 'myTable', user: 'root'}getSession({用户:配置。然后(session =>{返回会话。Sql('如果不存在则创建数据库${config.schema} ') .execute() .then() =>{返回会话。Sql('如果不存在则创建表${config.schema}.${config. schema。table} (_id SERIAL, name VARCHAR(3), age TINYINT) ') .execute()}) .then(() => {const table = session.getSchema(config.schema). getttable (config.table);返回表。插入(“名字”,“年龄”). values(“foo”,42). execute()(() = >{返回表。选择(“名字”,“年龄”). execute ()}) (res = > {console.log (res.fetchOne ());/ /(“foo”,42岁)})(()= >{返回table.update()其中(年龄=:v) .bind (' v ', 42)这里(“名字”、“酒吧”). execute()}),然后(()= >{返回表。选择(“名字”,“年龄”)。(name =: v) .bind(“v”、“酒吧”). execute ()}) (res = > {console.log (res.fetchOne ());/ /['酒吧',42]})(()= >{返回table.delete()。(真正的). execute (); }) .then(() => { return table.select() .execute() }) .then(res => { console.log(res.fetchAll()); // [] }); }) .then(() => { return session.sql(`drop table if exists ${config.schema}.${config.table}`) .execute(); }) .then(() => { return session.sql(`drop database if exists ${config.schema}`) .execute(); }) .then(() => { return session.close(); }); });

注意:原始的SQL语句也会使用专门的protobuf消息发送到服务器,因为不支持经典的MySQL协议。

授权信息

本产品可能包括在许可下使用的第三方软件。如果您使用的是MySQL Connector/Node.js 8.0的商业版本,请参阅MySQL Connector/Node.js 8.0商用License信息用户手册浏览许可信息,包括与本商业版本中可能包含的第三方软件有关的许可信息。如果您使用的是MySQL Connector/Node.js 8.0的社区版本,请参阅MySQL Connector/Node.js 8.0社区许可信息用户手册浏览许可信息,包括与本社区发行版中可能包含的第三方软件有关的许可信息。