金仓数据库:零阻碍线上体验与实操

1个月前发布 gsjqwyl
32 0 0

一、金仓数据库概述

金仓数据库具备如下关键特性:

  1. 高效性能 :依托先进的存储引擎,金仓数据库能够处理大规模的数据存储与查询工作。其独特的分布式架构以及高效的查询优化机制,使其在面对大数据、高并发场景时仍能维持出色的性能表现。

  2. 高度可靠 :支持多种高可用方案,像主从复制、自动故障转移、数据备份与恢复等,以此确保数据库系统的高可用性以及数据的安全性。

  3. 超强扩展性 :能够进行横向扩展,支持分布式集群,可适应不同规模的数据处理需求,能依据用户需求实现弹性扩展。

  4. 多元功能支持 :支持多种类型的索引、事务、存储过程等,能够满足不同行业和业务的数据库需求。

二、金仓数据库在线体验平台

金仓数据库在线体验平台的推出,旨在让用户更便捷地接触和体验数据库的各项功能。尤其对于初学者和开发者来说,在线平台能降低学习与使用的门槛。通过该在线体验平台,用户可快速尝试金仓数据库的各类功能,进行基础的数据库管理、查询优化、性能调优等操作。

“零阻碍体验 + 多场景互动”,金仓数据库在线体验平台现已在金仓社区正式上线!借助精简功能模块与贴心场景引导,助力数据库使用者、开发者、架构师及DBA快速掌握核心操作,无论是技术预研还是选型验证都能轻松应对!

平台独创Oracle/PostgreSQL/MySQL/SQL Server四模合一环境 ,体验前可自由选择数据库模式。

实现四大主流数据库95%以上核心特性兼容,例如:

  • MySQL模式:支持AUTO_INCREMENT、LIMIT分页、ON DUPLICATE KEY UPDATE等。
  • Oracle模式:原生运行ROWNUM分页、DECODE()函数及PL/SQL块。
  • SQL Server模式:兼容T-SQL流程控制(如IF…ELSE)及全局临时表(##前缀)。
  • 系统视图:如MySQL模式下支持information_schema.tables视图,结构与原库一致。

平台介绍模式常见使用方式:


我们尝试创建表:

创建表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)
);

现在向里面插入数据

使用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');

查看

查看customers客户表信息

select * from customers;

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

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

create index indx_c_name on customers(c_name);

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

select * from pg_indexes where schemaname='public';

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

SELECT命令的一般语法是:

[WITH with_queries] SELECT select_list FROM table_expression [sort_specification]

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

通过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;

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;

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

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

创建触发器

示例

  • 插入触发器

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

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语句,系统自动检测语法并即时输出执行结果。

1. 创建数据库

-- 创建一个新的数据库
CREATE DATABASE my_database;

2.连接数据库

连接到刚刚创建的数据库 my_database

-- 连接到指定数据库
\c my_database;

3.创建表

-- 创建一个表用于存储员工信息
CREATE TABLE employees (
    id SERIAL PRIMARY KEY,       -- 自动生成唯一ID
    first_name VARCHAR(50),      -- 员工的名字
    last_name VARCHAR(50),       -- 员工的姓
    birth_date DATE,             -- 员工的出生日期
    hire_date DATE,              -- 员工的入职日期
    salary DECIMAL(10, 2),       -- 员工的薪水,保留两位小数
    department VARCHAR(50)       -- 员工所属的部门
);

4. 插入数据

-- 向 employees 表中插入数据
INSERT INTO employees (first_name, last_name, birth_date, hire_date, salary, department)
VALUES 
('John', 'Doe', '1990-01-15', '2015-06-01', 55000.00, 'Engineering'),
('Jane', 'Smith', '1985-03-22', '2012-04-12', 60000.00, 'Marketing'),
('Emily', 'Johnson', '1992-11-30', '2018-01-10', 45000.00, 'Human Resources');

5. 查询数据

-- 查询所有员工信息
SELECT * FROM employees;

-- 查询所有员工的姓名和薪水
SELECT first_name, last_name, salary FROM employees;

-- 查询薪水大于50000的员工
SELECT * FROM employees
WHERE salary > 50000;

6. 更新数据

-- 更新员工薪水
UPDATE employees
SET salary = salary + 5000
WHERE department = 'Engineering';

-- 更新员工的部门
UPDATE employees
SET department = 'Sales'
WHERE first_name = 'Emily' AND last_name = 'Johnson';

7. 删除数据

-- 删除部门为 Sales 的所有员工
DELETE FROM employees
WHERE department = 'Sales';

-- 删除所有薪水低于 50000 的员工
DELETE FROM employees
WHERE salary < 50000;

8. 添加列

-- 在 employees 表中添加一个新列用于存储员工的电子邮件
ALTER TABLE employees
ADD COLUMN email VARCHAR(100);

9. 删除表

-- 删除整个表(慎用,删除后无法恢复)
DROP TABLE employees;

10. 创建索引

-- 创建一个索引,以便快速查询员工的姓氏
CREATE INDEX idx_last_name ON employees (last_name);

11. 事务处理

在金仓数据库中,可以使用事务来确保多个 SQL 操作的原子性和一致性。

-- 开始事务
BEGIN;

-- 插入新员工数据
INSERT INTO employees (first_name, last_name, birth_date, hire_date, salary, department)
VALUES ('Michael', 'Brown', '1988-07-25', '2020-02-10', 70000.00, 'Sales');

-- 更新现有员工的薪水
UPDATE employees
SET salary = 65000.00
WHERE first_name = 'John' AND last_name = 'Doe';

-- 如果没有错误,提交事务
COMMIT;

-- 如果发生错误,回滚事务
-- ROLLBACK;

12. 多表联接查询

-- 假设我们有一个 departments 表,用于存储部门信息
CREATE TABLE departments (
    id SERIAL PRIMARY KEY,
    name VARCHAR(50) NOT NULL
);

-- 向 departments 表中插入数据
INSERT INTO departments (name)
VALUES ('Engineering'), ('Marketing'), ('Human Resources');

-- 联接查询 employees 和 departments 表,获取员工及其所属部门的详细信息
SELECT e.first_name, e.last_name, e.salary, d.name AS department_name
FROM employees e
JOIN departments d ON e.department = d.name;

13. 子查询

-- 查询薪水高于公司平均薪水的员工
SELECT first_name, last_name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);

14. 视图(View)

-- 创建一个视图,用于查询所有薪水大于50000的员工信息
CREATE VIEW high_salary_employees AS
SELECT first_name, last_name, salary
FROM employees
WHERE salary > 50000;

-- 查询视图中的数据
SELECT * FROM high_salary_employees;

15. 备份与恢复

金仓数据库支持数据备份与恢复,通过 pg_dumppg_restore 工具可以方便地进行备份与恢复操作。

pg_dump -U username -F c -b -v -f /path/to/backup_file.backup my_database
pg_restore -U username -d my_database -v /path/to/backup_file.backup

16. 使用 JSON 数据类型

金仓数据库支持 JSON 类型,可以用于存储和查询半结构化的数据。

-- 创建一个包含 JSON 字段的表
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100),
    details JSONB -- JSONB 类型,用于存储 JSON 数据
);

-- 插入包含 JSON 数据的记录
INSERT INTO products (name, details)
VALUES 
('Laptop', '{"brand": "Dell", "processor": "Intel i7", "ram": "16GB"}'),
('Smartphone', '{"brand": "Apple", "model": "iPhone 12", "storage": "128GB"}');

-- 查询 JSON 数据
SELECT name, details->>'brand' AS brand
FROM products
WHERE details->>'ram' = '16GB';

17. 使用窗口函数

窗口函数允许对查询结果进行复杂的分析,通常用于计算排名、聚合等。

© 版权声明

相关文章

没有相关内容!

暂无评论

none
暂无评论...