零门槛在线体验:手把手教你玩转KingbaseES | 无需安装,一键解锁!

219 阅读14分钟

正文开始——

一、引言

KingbaseES(简称KES)是面向全行业、全客户关键应用的企业级大型通用融合数据库产品,适用于事务处理类应用、数据分析类应用、海量时序数据采集检索类应用、要求苛刻的互联网应用等场景;可用作管理信息系统、业务及生产系统、决策支持系统、多维数据分析系统、运行日志管理系统、全文检索系统、地理信息系统、时序数据处理相关系统的承载数据库。 KES采用融合数据库架构,通过多语法体系一体化架构实现一套软件兼容Oracle、MySQL、SQL Server、PostgreSQL等多个异构数据库的语法; 采用多模数据一体化存储,支持对关系模型、文档模型、全文本、GIS数据、时序等数据的统一存储、混合访问、模型间转换; 采用集中分布一体化架构,满足不同级别的可用性,为客户提供不同级别的可用性、性能扩展、成本需求,确保业务连续,最大化投资价值。

转存失败,建议直接上传图片文件

二、KingbaseES核心特性

1. 一键迁移,极速性能,安全无忧​

高度兼容Oracle,MySQL, SQL Server, PostgreSQL, 提供多种语法、数据对象特性支持平滑迁移:物化视图增量刷新,reference分区,表隐式ID,批量加载数据时行级回滚,内存级本地临时表、变量等;在迁移工具层面,支持迁移过程的智能评估,根据评估报告显示迁移成功率,并提示失效对象的推荐操作;在数据验证环节,可使用Kreply来抓取真实上线负载,回归验证迁移后的系统运行情况。

多手段实现零代码的应用代码迁移,不停机的应用上线切割,在金融、运营商、能源等关键行业核心应用完成数据库替代。

2. 性能强劲,扩展性强,助力企业应对大规模并发挑战​

针对企业业务增长带来的数据库事务和分析处理压力,KES在存储层优化了事务处理、可见性判断、各级日志、缓冲区的锁处理;算法层优化了聚集、连接、表达式等算子的实现,支持DQL、DML等各种操作的并行;在算力层面,针对NUMA、RDMA等新硬件,做了适应性改造。同时,还提供了基于读写分离的负载均衡技术,让企业能从容应对高负载大并发的业务。

3. 高度容错,稳定可靠,保障数据零丢失​

可靠性层面:支持时间冗余、网络冗余、组合冗余,结合实例故障自愈、无感扩缩容、滚动升级等技术,使KES提供了从单实例、本地集群、到多地多中心的多级容灾架构,满足金融行业6级标准,实现99.999%的高可用性;数据保护层面:支持永久增量备份、坏块/文件故障修复、逻辑对象恢复等多维数据保护技术,全方位保障关键业务数据的健壮性,实现数据0丢失。

4. 纵深防御,满足涉密行业的全方位保护需求​

KES完全符合国家安全数据库标准GB/T 20273-2019的结构化保护级(即第四级)的技术要求,近似等同于TCSEC B2级(国外数据库厂商在我国销售的数据库产品的安全级别只能达到TCSEC C1或C2级),同时具备涉密信息系统产品检测认证、商用密码产品认证、国家信息安全产品网络关键设备和网络安全专用产品双认证等多重完善齐全的产品资质认证体系。

适用于等保、分保等涉密场景,全面具备标准合规零风险、敏感数据不泄露、故障发生可恢复、智能好用易维护等多重能力。可极致满足如军队、军工、政府、金融行业、保险行业及电信行业等涉密部门的高安全要求。


三、KingbaseES在线体验

零门槛学习+功能验证

用户无需本地安装kingbaseES数据库环境,可直接在浏览器中进行SQL编写、调试与执行。提供交互式教学场景模板,降低了用户使用难度和环境搭建复杂度。支持数据库版本的核心特性体验,允许客户自定义SQL,内置实时反馈机制,能显著提升学习效率。 bbs.kingbase.com.cn/forum

首先登录金仓社区,找到服务与支持, 再选择体验中心的在线体验平台 来到下面的界面,点击开始体验

3.1 模式的创建和管理

下面将介绍模式常见的使用方式:

我们点击复制,再点击执行,即可看到执行结果。下面的功能我们可以在线依次体验

创建模式

CREATE SCHEMA 用于在当前数据库中创建模式,创建模式时指定的模式名必须与当前数据库中任何现有模式的名称不同。

示例: 创建两个数据库模式kes01,db02。

create schema kes01;
create schema db01;

查看模式列表

可以通过查看sys_namespace视图查看当前数据库的模式信息。

select * from sys_namespace where nspname in ('kes01','db01');

使用模式

若要在指定模式下创建对象或者访问指定模式下的对象,需要使用模式名限定的对象名。该名称包含模式名以及对象名,他们之间用 . 号分开。

示例:

在kes01下创建db_info表。

create table kes01.db_info(id int,name varchar(20) );

向表中插入数据。

insert into kes01.db_info values ('01','kingbase');

查询表中数据。

select * from kes01.db_info;

更改模式

kingbaseES支持使用 alter schema 语句可以更改模式的相关属性。

示例:

将schema db01重新命名为db02。

alter schema db01 rename to db02;

查询新模式信息

select * from sys_namespace where nspname='db02';

删除模式

kingbaseES支持使用 drop schema 命令进行删除。

drop schema db02 cascade ;
drop schema kes01 cascade ;

3.2 表

表是KingbaseES数据库中最基本的操作对象。一个表描述了一个实体对象,它记录了实体对象的重要信息。KingbaseES数据库表对象类型是关系表,关系表由简单的列组成,是最常见的表类型。

表的管理包括创建表、修改表和删除表等操作,以及普通表、分区表等的管理。

创建表

创建表customers客户表

CREATE TABLE customers (
    C_ID INT AUTO_INCREMENT PRIMARY KEY,
    C_NAME VARCHAR(50) NOT NULL,
    C_ADDRESS TEXT NOT NULL,
    C_PHONE VARCHAR(15) NOT NULL
);

创建分区表items商品表

CREATE TABLE items (
    I_ID INT PRIMARY KEY,
    I_NAME VARCHAR(100) NOT NULL,
    I_PRICE DECIMAL(10,2) NOT NULL,
    I_STOCK INT NOT NULL
)
PARTITION BY RANGE (I_PRICE)
(
    PARTITION p_low VALUES LESS THAN (200),
    PARTITION p_medium VALUES LESS THAN (500),
    PARTITION p_high VALUES LESS THAN (1000),
    PARTITION p_high_price VALUES LESS THAN (MAXVALUE)
);

创建orders订单表


CREATE TABLE orders (
    O_ID INT ,
    O_DATE DATE NOT NULL,
    C_ID INT NOT NULL,
    I_ID INT NOT NULL,
    O_QUANTITY INT NOT NULL,
    O_TOTAL_PRICE DECIMAL(10,2) NOT NULL,
    FOREIGN KEY (C_ID) REFERENCES customers(C_ID),
    FOREIGN KEY (I_ID) REFERENCES items(I_ID)
);

修改表结构

使用ALTER TABLE语句,给订单表添加一个主键。

ALTER TABLE orders ADD CONSTRAINT pk_orders PRIMARY KEY(O_ID);

我们可以依次创建表,修改表结构,在线执行,深入全面体验KingbaseES平台

使用ALTER TABLE语句,给订单表添加一个列comment列。

alter table orders add column  comment varchar(20);

插入示例数据

使用INSERT 命令用于向表中插入数据。

示例

向customers表中插入数据。

INSERT INTO customers (C_NAME, C_ADDRESS, C_PHONE) VALUES
('Alice Smith', '123 Main St, City A', '123-456-7890'),
('Bob Johnson', '456 Oak Ave, City B', '234-567-8901'),
('Charlie Brown', '789 Pine Rd, City C', '345-678-9012'),
('Diana White', '321 Elm St, City D', '456-789-0123'),
('Edward Green', '654 Birch Dr, City E', '567-890-1234'),
('Frances Hill', '987 Maple Ln, City F', '678-901-2345'),
('George Wright', '432 Cedar Rd, City G', '789-012-3456'),
('Helen King', '135 Willow St, City H', '890-123-4567'),
('Ian Miller', '246 Oak Dr, City I', '901-234-5678'),
('Judy Davis', '368 Pine Ave, City J', '012-345-6789');

向items表中插入数据。

INSERT INTO items (I_ID, I_NAME, I_PRICE, I_STOCK) VALUES
('1','Laptop', 1299.99, 50),
('2','Phone', 699.99, 75),
('3','Tablet', 299.99, 30),
('4','Monitor', 199.99, 100),
('5','Keyboard', 79.99, 80),
('6','Mouse', 49.99, 100),
('7','Speaker', 129.99, 40),
('8','Headphones', 159.99, 60),
('9','Printer', 239.99, 30),
('10','Scanner', 179.99, 40);

向custimers表中插入数据。


INSERT INTO orders (O_ID, O_DATE, C_ID, I_ID, O_QUANTITY, O_TOTAL_PRICE) VALUES
('1','2023-10-01', 1, 1, 2, 2599.98),  
('2','2023-10-02', 2, 2, 1, 699.99),   
('3','2023-10-03', 3, 3, 3, 899.97),   
('4','2023-10-04', 4, 4, 5, 999.95),   
('5','2023-10-05', 5, 5, 4, 319.96),   
('6','2023-10-06', 6, 6, 2, 99.98),    
('7','2023-10-07', 7, 7, 1, 129.99),   
('8','2023-10-08', 8, 8, 3, 479.97),   
('9','2023-10-09', 9, 9, 1, 239.99),   
('10','2023-10-10', 10, 10, 5, 899.95); 

查看示例数据

查看customers客户表信息

select * from customers;

查看items商品表信息

select * from items;

查看orders订单表信息

select * from orders;

3.3 索引

创建索引

kingbaseES使用 create index 语句来创建普通b-tree索引。

示例

在customers表的c_name列上创建索引。

create index indx_c_name on customers(c_name);

在itms分区表中的i_price列上创建本地索引。

 create index indx_i_price  on items (i_price) local;

在order表的o_id和o_date列上创建组合索引。

create index idx_o_i_d on orders (o_id, o_date);

使用create unique index语句在orders表中为o_id列创建唯一索引。

create unique index  o_u_id on  orders (o_id);

查看索引

通过使用select语句查询sys_indexes视图查看相关索引索引。

示例

select * from sys_indexes where schemaname='public';

修改索引

使用alter index语句可以o_u_id索引的相关属性信息。

示例

使用alter index语句将o_u_id索引重命名为indx_rename_u_id:

alter index o_u_id rename to indx_rename_u_id;

使用alter index语句将indx_rename_u_id设置索引填充因子

alter index indx_rename_u_id set (fillfactor = 60);

重建索引

使用reindex index语句重建indx_i_price索引:

reindex index indx_c_name;

使用reindex table语句重建表上所有索引:

reindex table orders;

删除索引

使用 drop index 语句删除索引:

drop index indx_rename_u_id;

3.4 查询

查询是从一个或多个表或视图中检索数据的操作。顶级SELECT语句称为查询,嵌套在另一个SQL语句中的查询称为子查询。本节描述一些查询与子查询类型以及如何使用它们。

SELECT 命令的一般语法是:

[WITH with_queries] SELECT select_list FROM table_expression [sort_specification]

示例查询

- 简单查询

查询所有订单信息。

SELECT O_ID, O_DATE, C_ID, I_ID, O_QUANTITY, O_TOTAL_PRICE FROM orders;

- 关联查询

查询客户的姓名和他们下的订单总数。

SELECT I_NAME, I_STOCK FROM items GROUP BY I_NAME, I_STOCK;

- 分组查询

查询每个商品的库存情况(按价格分类)。

SELECT c.C_NAME, COUNT(o.O_ID) AS order_count FROM customers c JOIN orders o ON c.C_ID = o.C_ID GROUP BY c.C_NAME;

- 子查询

查询订单金额大于 500 的订单信息。


SELECT * FROM orders WHERE O_TOTAL_PRICE > ( SELECT AVG(O_TOTAL_PRICE) FROM orders);

- with子句

计算每个客户的总消费金额,并筛选出消费金额最高的前5名客户


WITH customer_total_amount AS (
    SELECT 
        c.C_NAME,
        SUM(o.O_TOTAL_PRICE) AS total_amount
    FROM customers c
    JOIN orders o ON c.C_ID = o.C_ID
    GROUP BY c.C_NAME
)
SELECT * 
FROM customer_total_amount
ORDER BY total_amount DESC
LIMIT 5;

3.5 视图

视图是一个或多个表的逻辑表示形式。与表不同,视图既不分配存储空间,也不包含数据,而是通过定义的一个查询,从它所引用的基表中提取或派生出数据。视图的数据来自它所依赖基表,基表可以是表或其他视图。在视图上执行的所有操作实际上都指向基表。

视图创建

转存失败,建议直接上传图片文件

通过create view命令来进行创建视图,示例如下

  • 销售统计视图

功能:按日期汇总订单金额和数量。


CREATE OR REPLACE VIEW sales_summary AS
SELECT 
    DATE(o.O_DATE) AS order_date,
    COUNT(o.O_ID) AS order_count,
    SUM(o.O_TOTAL_PRICE) AS total_sales
FROM orders o
GROUP BY DATE(o.O_DATE);
  • 库存预警视图

功能:监控库存量低于 10 的商品。


CREATE OR REPLACE VIEW low_stock_items AS
SELECT 
    i.I_ID,
    i.I_NAME,
    i.I_STOCK
FROM items i
WHERE i.I_STOCK < 60;
  • 客户消费记录视图

功能:展示客户的订单历史和总消费金额。


CREATE OR REPLACE VIEW customer_purchase_history AS
SELECT 
    c.C_NAME,
    o.O_DATE,
    i.I_NAME,
    o.O_QUANTITY,
    o.O_TOTAL_PRICE
FROM customers c
JOIN orders o ON c.C_ID = o.C_ID
JOIN items i ON o.I_ID = i.I_ID;

视图查询

  • 查询销售统计视图。
SELECT * FROM sales_summary  WHERE order_date = '2023-10-01';
  • 查询库存预警视图。
SELECT * FROM low_stock_items;
  • 查询Alice Smith的订单历史和总消费金额。
SELECT * FROM customer_purchase_history  WHERE C_NAME = 'Alice Smith';

视图信息查询

通过使用select语句查询sys_views视图查看相关索引索引。

示例

select * from sys_views where schemaname='public';

删除视图

通过drop view命令来进行删除视图对象。

示例

drop view customer_purchase_history;

3.6 函数

SQL函数在KingbaseES数据库中作为内置组件存在,适用于多种SQL语句,需注意区分于由PL/SQL编写的用户自定义函数。

调用这些SQL函数时,若参数类型不符,KingbaseES会自动将其转换为函数所需的数据类型,确保执行无碍。

创建函数

示例

计算订单的折扣金额。


CREATE OR REPLACE FUNCTION calculate_discount_amount(_o_id INT)
RETURNS DECIMAL(8,2) AS $$
DECLARE 
    total_price DECIMAL(8,2);
BEGIN
    -- 从 orders 表中获取订单的总价
    SELECT O_TOTAL_PRICE INTO total_price 
    FROM orders 
    WHERE O_ID = _o_id;
    
    -- 假设折扣率为 10%
    RETURN total_price * 0.10;
END$$
LANGUAGE plpgsql;

查看订单ID=1的原价。

SELECT o_total_price from orders where o_id=1; 

查看订单 ID=1 的折扣金额。

SELECT calculate_discount_amount(1) AS discount_amount; 

3.7 触发器

触发器通过在数据操作时自动执行任务,强化了数据完整性和系统的自动化能力。合理设计和使用触发器,可以提升应用的效率、可靠性和安全性,但在开发和维护过程中需综合考虑性能影响和复杂性问题。

下面已一个简单示例来说明。

创建触发器

示例

  • 插入触发器

功能:每当插入一条新订单时,触发器会从商品表中减去相应数量的商品库存。

CREATE TRIGGER update_stock_AFTER_INSERT 
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
    UPDATE items 
    SET I_STOCK = I_STOCK - NEW.O_QUANTITY 
    WHERE I_ID = NEW.I_ID;
END;

查看当前库存情况。

select * from items where i_id=1;

往order订单表中插入一条数据

INSERT INTO orders VALUES('11','2023-11-01', 1, 1, 1, 200);

再试试查看订单情况

select * from items where i_id=1;

四、总结与展望

KingbaseES是一款面向全行业、全客户关键应用的企业级大型通用融合数据库产品,适用于事务处理类应用、数据分析类应用、海量时序数据采集检索类应用、要求苛刻的互联网应用等场景;金仓数据库在线体验平台凭借其零门槛体验、多模式兼容、实时反馈与帮助等核心功能,已成为数据库初学者和快速功能验证的理想选择。

面向未来,KingbaseES凭借持续的性能优化与生态兼容性,能够帮助组织应对日益增长的数据挑战,稳健支撑业务创新与长期发展。对于寻求高性能、高安全性与可扩展数据库解决方案的企业,KingbaseES值得认真评估与试用。