KingbaseES数据库操作指南(2):SQL语法从入门到精通
引言
在数字化转型的浪潮中,数据库作为企业核心数据的存储与处理中枢,其重要性不言而喻。近年来,国产数据库技术飞速发展,人大金仓KingbaseES凭借其 Sql 高度兼容性、强大的分布式架构以及针对国产软硬件环境的深度优化,成为金融、政务、能源等关键行业的首选数据库之一。

本文从表、索引、视图、用户权限、事务管理五大模块讲述,结合案例与性能优化建议,无论你是数据库新手,还是从其他数据库迁移至KingbaseES的技术人员,都能从中找到想要的内容。
| No. | 文章地址(点击进入) |
|---|---|
| 1 | 电科金仓KingbaseES数据库解析:国产数据库的崛起与技术创新 |
| 2 | KingBase数据库迁移利器:KDTS工具深度解析与实战指南 |
| 3 | KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战 |
| 4 | 电科金仓KingbaseES V9数据库:国产数据库的自主创新与行业实践深度解析 |
| 5 | KingbaseES客户端工具Ksql使用全指南:从安装到高级操作 |
| 6 | Spring JDBC与KingbaseES深度集成:构建高性能国产数据库应用实战 |
| 7 | 深度解析:基于 ODBC连接 KingbaseES 数据库的完整操作与实践 |
| 8 | Oracle与Kingbase深度兼容体验:从连接配置到性能优化全解析 |
| 9 | Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南 |
| 10 | Go语言×Kingbase数据库极速打通:Gokb驱动三步实操,让国产数据库连接效率嘎嘎提升! |
| 11 | 金仓数据库KingbaseES实现MongoDB平滑迁移全攻略:从架构适配到性能调优的完整实践 |
| 12 | 深度解析:通过ADO.NET驱动Kdbndp高效连接与操作Kingbase数据库 |
| 13 | PHP驱动Pdo_kdb连接Kingbase数据库全攻略:从零到实战的深度指南 |
| 14 | KingbaseES数据库操作指南(1):SQL语法从入门到精通 |
一、创建和管理表
表是数据库中数据存储的基本单元,也是数据库中最重要的数据库对象,合理的表设计直接影响查询效率、存储空间利用率以及后续的维护成本。博主简单介绍表的创建、修改、结构查看、数据操作和删除
1.1 创建表
CREATE TABLE 语句用于创建一个表,在 CREATE TABLE 语句中可以指定列、表约束等信息。
- 语法格式
CREATE TABLE table_name (column_name data_type,..., table_constraint);
- 示例
创建orders表,并为order_id列定义一个主键约束以及为customer_name定义一个NOT NULL约束
CREATE TABLE orders(order_id INT CONSTRAINT pk_orders PRIMARY KEY,customer_name VARCHAR(10) NOT NULL,employee_id INT,order_date DATE
);
1.2 修改表结构
ALTER TABLE 语句可以修改表结构及表上的属性。
- 示例
重命名orders表为orders_new
ALTER TABLE orders RENAME TO orders_new;
1.3 查看表结构
查看表的结构可以使用ksql工具的 \d+ table_name 命令。
- 示例
查看orders表的结构
\d+ orders
1.4 插入表数据
INSERT 命令用于向表中插入数据。
- 示例
使用 INSERT 命令增加包含所有字段的数据:
INSERT INTO orders VALUES(101,'RDJC',1,'1999-03-20');
使用 INSERT 命令增加只有部分字段的数据:
INSERT INTO orders(order_id, customer_name) VALUES(104,'ADJC');
使用 INSERT 命令增加多条数据:
INSERT INTO orders VALUES(103,'GDJC',4,'1989-03-20'),(105,'SDJC',1,'1999-03-20');
1.5 更新表数据
UPDATE 命令用于更新表中的数据。
- 示例
使用 UPDATE 命令修改数据:
UPDATE orders SET employee_id = 3 WHERE order_id = 104;
1.6 删除表数据
DELETE 命令用于删除表中的数据。
- 示例
使用 DELETE 命令删除数据:
DELETE FROM orders WHERE order_id = 103;
1.7 查询表数据
SELECT语句是用于查询表数据的SQL语句,查询表数据是从一个或多个表中检索数据的操作。
- 示例
使用SELECT语句检索表中所有数据:
SELECT * FROM orders;
使用SELECT语句检索表中特定列数据:
SELECT employee_id FROM orders;
使用DISTINCT子句消除查询结果中重复的行:
SELECT DISTINCT employee_id FROM orders;
使用WHERE子句筛选表中满足条件的行:
SELECT * FROM orders WHERE order_id > 104;
使用ORDER BY子句对查询结果进行排序:
SELECT * FROM orders ORDER BY order_id;
使用GROUP BY子句对查询结果进行分组:
SELECT COUNT(order_id), employee_id FROM orders GROUP BY employee_id;
1.8 删除表
DROP TABLE 语句用于删除数据库中的表。
- 示例
通过DROP TABLE语句删除orders_new表
DROP TABLE orders_new;
二、创建和管理索引
索引是一种数据库对象,它与表相关联,可以建立在单列或多列上。它的核心作用是帮助数据库快速定位符合条件的数据行,避免全表扫描,从而显著提升数据查询效率。
注意:索引并不是越多越好,当表中插入、更新或删除数据时,涉及的索引也需要更新,这会造成性能开销。所以需要对索引进行合理的创建和管理。
2.1 创建索引
KingbaseES中,使用 CREATE INDEX 语句来创建索引。
- 示例
使用 CREATE INDEX 语句创建索引:
CREATE INDEX创建的是非唯一索引
CREATE INDEX idx_employee ON orders(employee_id);
使用 CREATE INDEX 语句创建组合索引:
CREATE INDEX idx_orders ON orders(order_id, order_date);
使用CREATE UNIQUE INDEX语句创建唯一索引:
CREATE UNIQUE INDEX uid_order ON orders(order_id);
使用CREATE UNIQUE INDEX语句创建唯一组合索引:
CREATE UNIQUE INDEX uid_orders ON orders(order_id, order_date);
2.2 修改索引
使用ALTER INDEX语句可以修改索引的相关属性信息。
- 示例
使用ALTER INDEX语句重命名索引名:
ALTER INDEX idx_employee RENAME TO idx_employeeid;
使用ALTER INDEX语句设置索引选项:
FILLFACTOR为索引的填充因子,用于指定在创建或重建索引时新页的填充程度,其值是介于1~100之间的整数。
ALTER INDEX idx_employeeid SET(FILLFACTOR = 60);
2.3 查看索引
可通过下述两种方式查询数据库中的索引信息:
使用SELECT语句查询sys_indexes视图查看数据库中的所有索引:
SELECT * FROM sys_indexes;
使用ksql工具的 \di 命令查看数据库中的所有索引:
\di
2.4 重建索引
重建索引可以确保索引存储参数的修改完全生效,并且还能用来恢复无用或被损坏的索引。
使用REINDEX INDEX语句重建索引:
REINDEX INDEX idx_employee;
使用REINDEX TABLE语句重建表上所有索引:
REINDEX TABLE orders;
2.5 删除索引
使用 DROP INDEX 语句删除索引:
DROP INDEX idx_employeeid;
使用 DROP INDEX 语句级联删除索引:
级联删除索引是指删除索引时自动删除依赖于该索引的对象
DROP INDEX idx_orders CASCADE;
三、创建和管理视图
KingbaseES数据库中视图是一个虚拟表,不记录实际数据,只保存定义中的查询语句,当查询视图时,数据库内部执行该查询语句来获取数据。
3.1 创建视图
使用 CREATE VIEW 语句创建视图:
CREATE [options] VIEW name [options] AS query [options] ;
使用CREATE OR REPLACE VIEW语句创建视图:
CREATE OR REPLACE VIEW orders_info AS SELECT order_id, customer_name FROM orders;
3.2 查询视图定义
查询sys_views视图获取自定义视图定义:
SELECT * FROM sys_views WHERE viewname = 'orders_info';
使用ksql命令查询视图定义:
\sv orders_info
3.3 查询视图
使用SELECT语句查询视图:
SELECT * FROM orders_info;
3.4 修改视图
使用 ALTER VIEW 语句修改视图,例如视图重命名:
ALTER VIEW orders_info RENAME TO orders_new;
3.5 删除视图
使用 DROP VIEW 语句删除视图:
DROP VIEW orders_info;
四、创建和管理用户
KingbaseES中的用户是拥有数据库对象和权限的实体。为了确保数据的安全性,KingbaseES提供了多种方式来创建和管理用户。
4.1 创建用户
使用 CREATE USER 语句创建用户:
CREATE USER test WITH PASSWORD '123456';
使用createuser命令行工具创建用户:
createuser rdjc
4.2 修改用户
使用 ALTER USER 语句修改用户密码:
ALTER USER test PASSWORD '654321';
使用 ALTER USER 语句限制用户的连接数:
ALTER USER test CONNECTION LIMIT 1000;
使用 ALTER USER 语句增加CREATE ROLE权限:
ALTER USER test CREATE ROLE;
使用 ALTER USER 语句重命名用户名:
ALTER USER test RENAME TO Joe;
4.3 查看用户
使用SELECT语句查询sys_user视图查看用户:
SELECT * FROM sys_user;
使用ksql工具的 \du 命令查看用户:
\du
4.4 授予权限
GRANT 语句用于将对象的权限或角色的权限授予另一个角色或用户。
- 示例
使用GRANT语句将表的插入和更新权限授予用户:
GRANT INSERT, UPDATE ON orders TO Joe;
使用GRANT语句将表的查询权限授予多个用户:
GRANT SELECT ON orders TO rdjc, Joe;
4.5 撤销权限
REVOKE 语句用于从角色或用户处收回对象的权限或角色的权限。
使用REVOKE语句撤销用户在表上的插入和更新权限:
REVOKE INSERT, UPDATE ON orders FROM Joe;
使用REVOKE语句撤销多个用户在表上的查询权限:
REVOKE SELECT ON orders FROM rdjc, Joe;
4.6 删除用户
使用 DROP USER 语句删除用户:
DROP USER Joe;
五、事务
数据库事务是作为独立逻辑单元运行的操作集合,包含一条或多条SQL语句。事务内的所有操作要么全部成功执行,要么全部回滚不执行。
示例:
开启一个事务
BEGIN;
向orders表中插入一条新的记录
INSERT INTO orders VALUES(107,'RDJC',5,'1999-03-20');
如果操作都成功完成,开始提交事务
COMMIT;
插入语句执行失败的语句(orders表存在主键约束)
INSERT INTO orders VALUES(107,'RDJC',5,'2000-03-20');
ERROR: duplicate key value violates unique constraint "pk_orders"
DETAIL: Key (order_id)=(107) already exists.
当语句执行失败时,COMMIT与ROLLBACK等效,均为回滚事务
ROLLBACK;
结语

KingbaseES不仅是数据库产品,更是支撑企业数字化转型的核心基础设施,从基础SQL语法入手,掌握它的核心操作,通过掌握本文介绍的五大模块:表、索引、视图、用户权限、事务管理,开发者能够高效完成数据库设计、性能调优与安全管控,为企业的数字化转型提供坚实的数据底座。后续博主会持续更新更多SQL语法知识点。
