1、 金仓数据库在线体验平台
最近,我发现了一个超棒的数据库宝藏 —— 金仓数据库在线体验平台。它在金仓社区上线后,凭借 “零门槛体验 + 多场景交互” 的特点,迅速吸引了众多数据库爱好者的目光,我也忍不住去体验了一番。
2、 如何使用
打开浏览器,输入网址https://bbs.kingbase.com.cn,进入金仓社区,按照【服务与支持】→【KingbaseES 在线体验平台】的位置导航,轻松找到了这个平台。
无需安装任何软件,直接就能开启企业级数据库的探索之旅,这种便捷性真是让人惊喜,对于我这种不想被繁琐安装步骤束缚的人来说,简直太友好了。
进入平台后,最让我眼前一亮的是它独创的 Oracle/PostgreSQL/MySQL/SQL Server 四模合一环境。在开启体验之前,可以根据自己的需求和熟悉程度自由选择数据库模式,这一点极大地满足了不同用户的多样化需求。我先尝试了 MySQL 模式,惊喜地发现它完美支持 AUTO_INCREMENT、LIMIT 分页、ON DUPLICATE KEY UPDATE 等功能,这些都是在实际开发中经常用到的,而且使用起来和原生 MySQL 几乎没有差别,系统视图也支持 information_schema.tables 视图,结构与原库一致,让人倍感亲切。
接着,我切换到 Oracle 模式,原生运行 ROWNUM 分页、DECODE () 函数及 PL/SQL 块的特性让我轻松完成了一些复杂的数据处理任务。
再试试 SQL Server 模式,T-SQL 流程控制(如 IF...ELSE)及全局临时表(## 前缀)的兼容,让我能够顺畅地进行逻辑编程和数据存储管理。平台实现了四大主流数据库 95% 以上核心特性兼容,这种强大的兼容性,无论是对于技术预研还是选型验证,都提供了极大的便利。
对于新手来说,平台的场景化引导教学功能堪称贴心。跟随向导任务,我从零开始创建模式、表、函数、触发器等,每一个步骤都有详细的说明和引导,就像有一位专业的老师在身边指导一样。在这个过程中,我快速熟悉了金仓数据库的各项操作,原本觉得复杂的数据库操作,在这样的引导下变得简单易懂,大大降低了学习成本。
平台的即写即验沙箱功能更是让我眼前一亮。选定兼容模式后,我直接输入 SQL 语句,系统会自动检测语法并即时输出执行结果,配合 “零配置 + 场景化” 设计,我仅仅用了 15 分钟,就完成了从建表到复杂查询的全流程操作。这种实时交互的模式,让我能够快速验证自己的想法,在技术选型、迁移预研时,再也不用花费大量时间搭建环境,直接在沙箱中就能高效完成验证,工作效率得到了大幅提升。
这次体验金仓数据库在线体验平台,让我深刻感受到了国产数据库的硬核实力。
它不仅功能强大、兼容性高,而且操作便捷、对新手友好,无论是数据库使用者、开发者、架构师还是 DBA,都能在这里找到适合自己的学习和实践方式。如果你也对数据库感兴趣,不妨来金仓社区,开启这场零门槛的云端实践之旅,相信你一定会和我一样,被它的魅力所折服!
演示窗口,左边是教程,右边是练习窗体:
3、 从0到1 展示各种功能
模式的创建和管理
模式又被称为schema,它是用于组织和命名数据库对象(如表、视图、函数等)的逻辑容器。 模式是数据库中组织和管理数据库对象的重要机制,它提供了一种逻辑上的命名空间,具备如下优点:
可以避免命名冲突,允许在同一数据库中的不同模式下创建同名对象。 便于权限管理和隔离,每个模式分配不同的访问权限,以此控制用户或角色对特定模式中对象的访问权限,提高数据库的安全性。
下面将介绍模式常见的集中使用方式:
创建模式
CREATE SCHEMA 用于在当前数据库中创建模式,创建模式时指定的模式名必须与当前数据库中任何现有模式的名称不同。
示例: 创建数据库模式s1,s2。
create schema s1;
create schema s2;
查看模式列表
可以通过查看sys_namespace视图查看当前数据库的模式信息。
select * from sys_namespace where nspname in ('s1','s2');
使用模式
若要在指定模式下创建对象或者访问指定模式下的对象,需要使用模式名限定的对象名。该名称包含模式名以及对象名,他们之间用 . 号分开。
示例:
在S1下创建test表。
create table s1.test(id int,name varchar(20) );
向表中插入数据。
insert into s1.test values ('1','kingbase');
查询表中数据。
select * from s1.test;
更改模式
kingbaseES支持使用 alter schema 语句可以更改模式的相关属性。
示例:
将schema s2重新命名为s2_new。
alter schema s2 rename to s2_new;
查询新模式信息
select * from sys_namespace where nspname='s2_new';
删除模式
kingbaseES支持使用 drop schema 命令进行删除。
drop schema s2_new cascade ;
表
表是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);
使用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 (O_IDI_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);
索引
索引是一种与表相关联的数据结构,是为了提高数据检索的性能而建立的。KingbaseES索引为表数据提供快速存取路径。索引适用于一范围的行查询或指定行的查询。索引可建立在一个表的一列或多列上,一旦建立,将由 KingbaseES 数据库自动维护和使用,对用户是完全透明的,系统的优化器会根据统计信息确定是否使用索引来提高系统性能。索引逻辑和物理上都独立于与其相关联的表数据。因此,可以删除或创建索引,但不会对索引表产生影响。
创建索引
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;
查询
查询是从一个或多个表或视图中检索数据的操作。顶级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_amountFROM customers cJOIN orders o ON c.C_ID = o.C_IDGROUP BY c.C_NAME
)
SELECT *
FROM customer_total_amount
ORDER BY total_amount DESC
LIMIT 5;
使用总结
金仓数据库在线体验平台以 “零门槛、高兼容、强交互” 的特点,展现了国产数据库的技术实力。无论是新手学习数据库基础,还是开发者进行技术选型与迁移验证,平台均能提供高效的实践环境。推荐访问金仓社区开启云端数据库探索之旅,体验多模兼容与实时验证的便捷性。