MySQL X DevAPI 引入了一种全新、现代且易于学习的数据处理方式,使您能够处理关系
数据和文档
数据。由支持 X 协议的 MySQL Shell
和 MySQL Connectors
实现
- X DevAPI 会话是一个高级数据库 Session 概念,不同于传统的低级 MySQL 连接会话。新的高级 Session 概念使您能够编写可以透明地从单个 MySQL 服务器扩展到多服务器环境的代码
- 应用程序可以与运行 X 插件的 MySQL 服务器实例建立逻辑会话。会话由 mysqlx 工厂生产,返回的会话可以封装对一个或多个运行 X Plugin 的 MySQL 服务器实例的访问
- 使用 X 协议时,Session 可以封装一个或多个实际的 MySQL 连接。使用这种更高的抽象级别将物理 MySQL 设置与应用程序代码分离。该 Session 提供对 X DevAPI 的完全支持和对 SQL 的有限支持
关系表与 JSON 文档对比
概念 | 关系表 | JSON 文档 |
---|---|---|
数据库 | database | Schema |
表 | Table | Collection |
行 | Row | Document |
列 | Column | Field |
安装 MySQL Shell
1、安装 mysql shell 并连接到 mysql 服务器,及其提供的命令行操作模式(js,sql,py)切换
# yum 方式安装
yum install mysql-shell\*8.0.30
# 可选,二进制解压安装
wget https://cdn.mysql.com//Downloads/MySQL-Shell/mysql-shell-8.0.30-linux-glibc2.12-x86-64bit.tar.gz
tar xzf mysql-shell-8.0.30-linux-glibc2.12-x86-64bit.tar.gz && cd mysql-shell-8.0.30-linux-glibc2.12-x86-64bit/
bin/mysqlsh --help
# 通过 mysqlsh 连接至 mysql 服务器 192.168.31.11
[root@dev ~]# mysqlsh
MySQL JS >\c 192.168.31.11
#> Creating a session to 'root@192.168.31.11'
#> Please provide the password for 'root@192.168.31.11': ****
#> Save password for 'root@192.168.31.11'? [Y]es/[N]o/Ne[v]er (default No): y
#> Fetching schema names for autocompletion... Press ^C to stop.
#> Your MySQL connection id is 14 (X protocol)
#> Server version: 8.0.30 MySQL Community Server - GPL
#> No default schema selected; type \use <schema> to set one.
# 切换 mysql shell 操作模式
MySQL localhost SQL > \js
#> Switching to JavaScript mode...
MySQL localhost JS > \sql
#> Switching to SQL mode... Commands end with ;
MySQL localhost JS > \py
#> Switching to Python mode...
# dev api
MySQL localhost JS > \help devapi
MySQL localhost JS > \help mysqlx
# admin api
MySQL localhost JS > \help adminapi
MySQL localhost JS > \help dba
管理 Tables
可以使用X DevAPI
来管理 MySQL 关系数据
JavaScript 模式
// javascript 模式下,连接 MySQL,创建数据库 demo,创建表 user
var mysqlx = require('mysqlx');
var session = mysqlx.getSession( { host: '192.168.31.11', port: 33060, user: 'root', password: 'root'} );
var db = session.createSchema('demo'); // 切换 session.getSchema('demo');
session.sql("use demo")
session.sql("create table user(id int,name varchar(16),age int)")
session.sql("show tables");
var user = db.getTable('user') // 获取数据表对象 user
// 可以使用 insert() 方法和 values() 方法将记录插入到现有的关系表
user.insert("id", "name", "age").values(1, "colin01", 32)
user.insert("id", "name", "age").values(2, "colin02", 32)
user.delete().where("name = 'colin01'")
user.update().set("name", "colin03").where("name = 'colin01'")
user.select()
user.select(["name", "age"])
user.select(["name", "age"]).where("name like 'colin%'")
user.select(["name", "age"]).where("name like 'colin%' and age = 22")
Python 模式
连接 mysql 数据库,创建 session,选择要操作的数据库
// python 模式下,连接 MySQL,创建数据库 demo,创建表 user
from mysqlsh import mysqlx
session = mysqlx.get_session( { 'host': '192.168.31.11', 'port': 33060, 'user': 'root', 'password': 'root' } )
db = session.create_Schema('demo'); // 若使用现有数据库,则使用 session.get_schema('demo');
session.sql("use demo")
session.sql("create table user(id int,name varchar(16),age int)")
session.sql("show tables");
user = db.get_table('user'); // 获取数据表对象 user
// 可以使用 insert() 方法和 values() 方法将记录插入到现有的关系表
user.insert("id", "name", "age").values(1, "colin01", 32)
user.insert("id", "name", "age").values(2, "colin02", 32)
user.delete().where("name = 'colin01'")
user.update().set("name", "colin03").where("name = 'colin01'")
user.select()
user.select(["name", "age"])
user.select(["name", "age"]).where("name like 'colin%'")
user.select(["name", "age"]).where("name like 'colin%' and age = 22")
MySQL localhost:33060+ ssl Py > db
// <Schema:demo>
MySQL localhost:33060+ ssl Py > session
// <Session:root@192.168.31.11:33060>
MySQL localhost:33060+ ssl Py > user
// <Table:user>
管理 Documents
可以使用X DevAPI
来管理 MySQL 文档数据
JavaScript 模式
1、操作 mysql 文档(Documents)
该操作模式下创建数据库(Schema)、集合(Collection)、添加文档(Document)演示
mysql client 到 mysql server 的连接协议有: 经典的 MySQL 协议(工作端口 3306) 和 X 协议(工作端口 33060)
// 连接到 mysql 并创建数据库 demo01
var mysqlx = require('mysqlx');
var session = mysqlx.getSession( { host: 'localhost', port: 33060, user: 'root', password: 'root'} );
var db = session.createSchema('demo01');
// Create a new collection 'user' and Insert JSON data directly
var coll = db.createCollection('user');
coll.add({_id: '1', name: 'colin01', age: 21}).execute();
coll.add([ {_id: '2', name: 'colin02', age: 24}, {_id: '3', name: 'colin03', age: 39} ]).execute();
// 打印集合文档
coll.find()
coll.find('name like :param1 AND age < :param2').limit(1).bind('param1', 'colin%').bind('param2', 22).execute();
// 删除集合
db.dropCollection('user');
session.close()
session.getSchemas();
// 执行 db 查看当前操作的数据库或 schema,执行 session 、coll 时同理;该规则同样适用于 py 模式
Python 模式
1、操作文档存储
from mysqlsh import mysqlx
# 连接到 mysql 并创建数据库 demo02
session = mysqlx.get_session( { 'host': '192.168.31.11', 'port': 33060, 'user': 'root', 'password': 'root' } )
db = session.create_schema('demo02');
# 创建集合 user
coll = db.create_collection('user')
coll.add({ '_id': '1', 'name': 'colin01', 'age': 21 }).execute();
coll.add([ {'_id': '2', 'name': 'colin02', 'age': 24}, {'_id': '3', 'name': 'colin03', 'age': 39} ]).execute();
# 打印集合文档
coll.find()
coll.find('name like :param1 AND age < :param2').limit(1).bind('param1', 'colin%').bind('param2', 22).execute();
session.close()
session.get_Schemas();
参考
python 模式下 X DevAPI 用户指南
javascript 模式下 X DevAPI 用户指南
为 MySQL 8.0 中引入的 X DevAPI 协议提供了一个客户端库,该协议支持关系表
和JSON 文档
,从而可以同时使用表 和 集合
Connector/Python