快速预览sequoadb语法
本课程将带领您在已经部署 SequoiaDB 巨杉数据库引擎及创建了 MySQL 实例的环境中,对 SQL 语法特性与底层数据分布进行验证,同时熟悉 SequoiaDB 巨杉数据库存储引擎的直接操作。
请点击右侧选择使用的实验环境
环境架构:
本课程中 SequoiaDB 巨杉数据库的集群由一个 SQL 引擎和一组三分区单副本的巨杉数据库引擎组成;其中,SQL引擎包括 1 个 SequoiaSQL-MySQL 数据库实例节点,数据库引擎包括 1 个协调节点、1 个编目节点和 3 个数据节点。
图片描述
详细了解 SequoiaDB 巨杉数据库系统架构:
SequoiaDB 系统架构
实验环境
课程使用的实验环境为 Ubuntu Linux 16.04 64 位版本。SequoiaDB 巨杉数据库引擎以及 SequoiaSQL-MySQL 实例均为 3.4 版本。
切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户为 sdbadmin。
su - sdbadmin
copy
Note:
用户 sdbadmin 的密码为 sdbadmin
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
copy
输出结果:
图片描述
切换到 sdbadmin 用户
部署 SequoiaDB 巨杉数据库和 SequoiaSQL-MySQL 实例的操作系统用户为 sdbadmin。
su - sdbadmin
copy
Note:
用户 sdbadmin 的密码为 sdbadmin
查看巨杉数据库版本
查看 SequoiaDB 巨杉数据库引擎版本:
sequoiadb --version
copy
输出结果:
图片描述
进入 MySQL shell ,连接 SequoiaSQL-MySQL 实例并创建 company 数据库实例,为接下来验证 MySQL 语法特性做准备。
登录 MySQL Shell
/opt/sequoiasql/mysql/bin/mysql -h 127.0.0.1 -P 3306 -u root
copy
创建数据库
CREATE DATABASE company;
USE company;
copy
创建数据表
在 SequoiaSQL-MySQL 实例中创建的表,将同步在 SequoiaDB 上创建对应的分区表( hash 分区,包含所有分区组)。自动分区时,分区键按顺序优先使用主键字段和唯一索引字段。
1)创建包含自增主键字段的 employee 表;
CREATE TABLE employee
(
empno INT AUTO_INCREMENT PRIMARY KEY,
ename VARCHAR(128),
age INT
);
copy
2)创建包含唯一索引的 manager 表;
CREATE TABLE manager
(
empno INT,
department TEXT,
UNIQUE INDEX id_idx(empno)
);
SequoiaDB 巨杉数据库的 MySQL 实例支持完整的 CRUD 数据基本操作。
1)验证基本的数据写入操作;
INSERT INTO employee (ename, age) VALUES ("Jacky", 36);
INSERT INTO employee (ename, age) VALUES ("Alice", 18);
INSERT INTO manager VALUES (1, "Sales Department");
copy
2)验证单表查询与排序;
SELECT * FROM employee ORDER BY empno ASC LIMIT 1;
copy
3)验证两表关联功能;
SELECT * FROM employee, manager WHERE employee.empno = manager.empno;
copy
4)验证数据更新能力;
UPDATE employee SET ename = "Bob" WHERE empno = 1;
copy
5)查看数据结果;
SELECT * FROM employee;
copy
6)验证数据删除能力;
DELETE FROM employee WHERE empno = 2;
copy
7)查看数据结果并确认 empno 为 2 的记录被删除;
SELECT * FROM employee;
SequoiaDB 巨杉数据库的 MySQL 数据库实例支持完整的事务操作能力,本小节将验证其基本的回滚与提交能力。
验证回滚能力
1)开始事务;
BEGIN;
copy
2)写入数据;
INSERT INTO manager VALUES (2, "Product Department");
copy
3)查询数据,验证数据写入成功;
SELECT * FROM manager WHERE empno = 2;
copy
4)回滚事务操作;
ROLLBACK;
copy
5)事务回滚后,验证写入数据已被撤销;
SELECT * FROM manager WHERE empno = 2;
copy
验证提交能力
1)开始事务;
BEGIN;
copy
2)写入数据;
INSERT INTO manager VALUES (2, "Product Department");
copy
3)提交事务;
COMMIT;
copy
4)查询数据,验证写入的数据已正确提交;
SELECT * FROM manager WHERE empno = 2;
SequoiaDB 巨杉数据库支持标准的 MySQL 存储过程。本小节将验证其对标准 MySQL 存储过程的支持。
1)创建存储过程;
DELIMITER //
CREATE PROCEDURE delete_match()
BEGIN
DELETE FROM manager WHERE empno = 2;
END//
DELIMITER ;
copy
2)调用存储过程;
CALL delete_match();
copy
3)查询数据,验证 empno = 2 的记录被存储过程成功删除;
SELECT * FROM manager WHERE empno = 2;
SequoiaDB 巨杉数据库支持标准的 MySQL 视图功能。本小节将验证其对标准 MySQL 视图能力的支持。
1)创建视图;
CREATE VIEW manager_view AS
SELECT
e.ename, m.department
FROM
employee AS e, manager AS m
WHERE
e.empno = m.empno;
copy
2)查询视图数据,验证视图创建成功;
SELECT * FROM manager_view;
本小节将验证 SequoiaDB 巨杉数据库的 MySQL 实例对在线添加与删除主键及索引能力的支持。
添加与删除主键
1)创建 department 表;
CREATE TABLE department
(
deptno INT PRIMARY KEY,
dname VARCHAR(128),
loc VARCHAR(128)
);
copy
2)查看表结构,验证主键是否创建成功;
DESC department;
copy
3)删除主键;
ALTER TABLE department DROP PRIMARY KEY;
copy
4)查看表结构,验证主键是否删除成功;
DESC department;
copy
Note
表结构中,key列字段为”PRI”的是主键字段。
添加与删除索引
1)创建索引;
ALTER TABLE employee ADD INDEX name_idx(ename);
copy
2)查看表的索引,验证”name_idx”索引是否创建成功;
SHOW INDEX FROM employee;
copy
3)删除创建索引;
DROP INDEX name_idx ON employee;
copy
4)查看表的索引,验证”name_idx”索引是否删除成功;
SHOW INDEX FROM employee;
copy
Note
索引信息中,Key_name 列字段为索引名称。
1)查看更改前的表结构;
DESC employee;
copy
2)扩容 employee 表的 ename 字段;
ALTER TABLE employee MODIFY COLUMN ename VARCHAR(130);
copy
3)查看更改后的表结构,验证 ename 字段长度扩容为130;
DESC employee;
验证 TRUNCATE 方法,清空 employee 表,方便后续小节对数据分布进行验证。
1)统计 employee 表;
SELECT COUNT(*) FROM employee;
copy
2)使用 TRUNCATE 方法清空 employee 表;
TRUNCATE TABLE employee;
copy
3)统计 employee 表,确认是否数据已经被清空;
SELECT COUNT(*) FROM employee;
copy
4)退出 MySQL Shell;
\q
之前的小节中,通过 SequoiaSQL-MySQL 数据库实例对数据进行增删改查。SequoiaDB 巨杉数据库不仅支持 SQL 操作,还支持通过 JSON API 的方式直接进行数据库操作。
SequoiaDB Shell 是 SequoiaDB 巨杉数据库存储引擎的交互式命令行界面,用户可使用 JavaScript 脚本语言进行数据库交互操作。
1)在 Linux 命令行中进入 SequoiaDB Shell 交互式界面;
sdb
copy
2)使用 JavaScript 连接协调节点,并获取数据库连接;
var db = new Sdb("localhost", 11810);
用户可以直接使用 SequoiaDB Shell 提供的交互式 JavaScript 接口进行数据的插入、查询、更新与删除操作。在 SequoiaSQL-MySQL 中创建的数据库与表,都可以在 SequoiaDB Shell 命令行中直接访问。
1)使用 insert() 向 SequoiaDB 巨杉数据库集合中写入记录;
db.company.employee.insert( { ename: "Abe", age: 20 } );
copy
2)使用 find() 方法从集合中查询数据记录;
db.company.employee.find( { ename: "Abe" } );
copy
3)使用 update() 方法将集合中的记录进行修改;
db.company.employee.update( { $set: { ename: "Ben" } }, { ename: "Abe" } );
copy
4)使用 find() 方法从集合中查询数据记录,看是否修改;
db.company.employee.find( { ename: "Ben" } );
copy
5)使用 remove() 方法从集合中删除数据;
db.company.employee.remove( { ename: "Ben" } );
copy
6)使用 find() 方法从集合中查询数据记录,看是否删除;
db.company.employee.find( { ename: "Ben" } );
事务控制不仅可以在 SequoiaSQL-MySQL 数据库实例进行操作控制,也可以在 SequoiaDB Shell 交互式命令行界面中进行完整的事务控制操作:
SequoiaDB 巨杉数据库事务说明
验证回滚能力
1)开始事务;
db.transBegin();
copy
2)写入数据;
db.company.manager.insert( { empno: 3, department: "Personnel Department" } );
copy
3)查询数据,验证数据成功写入;
db.company.manager.find( { empno: 3 } );
copy
4)回滚事务;
db.transRollback();
copy
5)查询数据,验证写入的数据已回滚;
db.company.manager.find( { empno: 3 } );
copy
验证提交能力
1)开始事务;
db.transBegin();
copy
2)写入数据;
db.company.manager.insert( { empno: 3, department: "Personnel Department" } );
copy
3)查询数据,验证数据成功写入;
db.company.manager.find( { empno: 3 } );
copy
4)提交事务;
db.transCommit();
copy
5)查询数据,验证数据已成功提交;
db.company.manager.find( { empno: 3 } );
本小节使用 JavaScript 的 for 循环向 MySQL 表 employee 中写入 1000 条数据,并直连三个数据节点分析数据分布情况。
写入测试数据
1)写入测试数据;
for (var i = 0; i < 1000; i++)
{
db.company.employee.insert( { ename: "TEST", age: 20 } );
}
copy
2)检查是否写入测试数据;
db.company.employee.count();
copy
分析数据分布
1)连接第一个数据分区的存储节点;
var db1 = new Sdb("localhost", 11820);
copy
2)统计第一个数据分区的数据量;
db1.company.employee.count();
copy
3)连接第二个数据分区的存储节点;
var db2 = new Sdb("localhost", 11830);
copy
4)统计第二个数据分区的数据量;
db2.company.employee.count();
copy
5)连接第三个数据分区的存储节点;
var db3 = new Sdb("localhost", 11840);
copy
6)统计第三个数据分区的数据量;
db3.company.employee.count();
copy
7)从直连数据节点进行统计结果,分析数据的位置,可以看出数据均匀分散在3个数据分区中;
关闭数据库连接
1)关闭 db、db1、db2、db3 数据库连接;
db.close();
db1.close();
db2.close();
db3.close();
copy
2)退出 SequoiaDB Shell;
quit;
通过本课程,我们验证了 SequoiaDB 巨杉数据库所支持的 MySQL 语法,并对底层数据存储分布进行了直接验证。可以看出:
SequoiaSQL-MySQL 实例 100% 兼容标准的 MySQL 语法;
SequoiaDB 巨杉数据库底层存储为分布式架构,数据可均匀分布在多个分区中;