KingbaseES聚焦产品上线

KingbaseES聚焦产品上线:金仓数据库在线体验平台上线,开启数据库实践新征程

KingbaseES 在线体验平台是为数据库使用者、开发者、架构师及 DBA 打造的轻量化实践平台,无需本地安装数据库环境,通过浏览器即可快速上手,降低技术探索门槛,加速对金仓数据库功能特性的验证与学习,助力技术预研、选型验证及新手能力提升 。

KingbaseES在线体验平台注册

1、注册KingbaseES官方账户

2、手机号注册即可

3、服务与支持-KingbaseES在线体验平台

4、即可完成在线体验

KingbaseES在线体验平台体验

索引

索引是一种与表相关联的数据结构,是为了提高数据检索的性能而建立的。KingbaseES索引为表数据提供快速存取路径。索引适用于一范围的行查询或指定行的查询。索引可建立在一个表的一列或多列上,一旦建立,将由 KingbaseES 数据库自动维护和使用,对用户是完全透明的,系统的优化器会根据统计信息确定是否使用索引来提高系统性能。索引逻辑和物理上都独立于与其相关联的表数据。因此,可以删除或创建索引,但不会对索引表产生影响。

创建索引

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

示例:在customers表的c_name列上创建索引

mysql 复制代码
create index indx_c_name on customers(c_name);

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

sql 复制代码
 create index indx_i_price  on items (i_price) local;

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

sql 复制代码
create index idx_o_i_d on orders (o_id, o_date);

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

sql 复制代码
create unique index  o_u_id on  orders (o_id);
查看索引

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

示例:sql复制

sql 复制代码
select * from sys_indexes where schemaname='public';
修改索引

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

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

sql 复制代码
alter index o_u_id rename to indx_rename_u_id;

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

sql 复制代码
alter index indx_rename_u_id set (fillfactor = 60);
重建索引

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

sql 复制代码
reindex index indx_c_name;

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

sql 复制代码
reindex table orders;
删除索引

使用 drop index 语句删除索引

sql 复制代码
drop index indx_rename_u_id;

查询

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

SELECT 命令的一般语法是:

mysql 复制代码
[WITH with_queries] SELECT select_list FROM table_expression [sort_specification]
示例查询
  • 简单查询

查询所有订单信息

sql 复制代码
SELECT O_ID, O_DATE, C_ID, I_ID, O_QUANTITY, O_TOTAL_PRICE FROM orders;
  • 关联查询

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

sql 复制代码
SELECT I_NAME, I_STOCK FROM items GROUP BY I_NAME, I_STOCK;
  • 分组查询

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

sql 复制代码
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 的订单信息

sql 复制代码
SELECT * FROM orders WHERE O_TOTAL_PRICE > ( SELECT AVG(O_TOTAL_PRICE) FROM orders);
  • with子句

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

sql 复制代码
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;

视图

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

视图创建

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

  • 销售统计视图

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

sql 复制代码
CREATE 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 的商品

sql 复制代码
CREATE VIEW low_stock_items AS
SELECT 
    i.I_ID,
    i.I_NAME,
    i.I_STOCK
FROM items i
WHERE i.I_STOCK < 60;
  • 客户消费记录视图

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

sql 复制代码
CREATE 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;
视图查询
  • 查询销售统计视图
sql 复制代码
SELECT * FROM sales_summary  WHERE order_date = '2023-10-01';
  • 查询库存预警视图
sql 复制代码
SELECT * FROM low_stock_items;
  • 查询Alice Smith的订单历史和总消费金额
sql 复制代码
SELECT * FROM customer_purchase_history  WHERE C_NAME = 'Alice Smith';
视图信息查询

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

mysql 复制代码
select * from sys_views where schemaname='public';
删除视图

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

mysql 复制代码
drop view customer_purchase_history;

函数

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

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

创建函数

示例:计算订单的折扣金额

sql 复制代码
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的原价

sql 复制代码
SELECT * from orders where o_id=1; 

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

sql 复制代码
SELECT calculate_discount_amount(1) AS discount_amount; 

2599.98*0.1=259.9980,符合预期

触发器

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

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

创建触发器

示例

  • 插入触发器

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

sql 复制代码
\set SQLTERM /
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;
/

查看当前库存情况

sql 复制代码
select * from items;

商品编号为1的库存为50

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

sql 复制代码
INSERT INTO orders VALUES('11','2023-11-01', 1, 1, 1, 200),  

再试试查看订单情况

sql 复制代码
select * from items;

商品编号为1的库存为49,证明触发器生效了

删除触发器
sql 复制代码
drop trigger update_stock_AFTER_INSERT;

总结

KingbaseES 中,索引作为提升数据检索性能的数据结构,可通过CREATE INDEX建立 B-Tree、组合或唯一索引等,并支持查看、修改、重建及删除操作;查询操作涵盖简单查询、关联查询、分组查询、子查询及 WITH 子句等类型,能从表或视图中高效检索数据;视图是基表的逻辑映射,不存储实际数据,可通过CREATE VIEW创建销售统计、库存预警等视图以简化复杂查询;函数通过 PL/pgSQL 编写,如calculate_discount_amount函数可计算订单折扣金额;触发器在数据操作时自动执行,例如插入订单时触发库存更新,通过CREATE TRIGGER创建后可通过DROP TRIGGER删除,这些功能共同强化了数据库的性能、安全性与自动化能力。

相关推荐
Dxy12393102169 小时前
MySQL的UPPER函数介绍
数据库·mysql
倔强的石头_9 小时前
KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
数据库
yuezhilangniao10 小时前
mysql mogoDB pg redis-四大数据库选型-数据库对比大白话指南
数据库·redis·mysql
一 乐10 小时前
医疗保健|医疗养老|基于Java+vue的医疗保健系统(源码+数据库+文档)
java·前端·数据库·vue.js·毕设
m0_7482480211 小时前
Redis 简介与安装指南
数据库·redis·缓存
Elastic 中国社区官方博客16 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪18 小时前
两次连接池泄露的BUG
java·数据库
TDengine (老段)19 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq74223498419 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE20 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle