Professional Documents
Culture Documents
KStudio快速开发指南
KStudio快速开发指南
KStudio快速开发指南
金仓数据库管理系统 KingbaseES
文档版本:V8(V008R006C008B0014)
发布日期:2023 年 10 月 13 日
北京人大金仓信息技术股份有限公司
目 录
目 录
第 1 章 前言 1
1.1 适用读者 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 相关文档 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.3 术语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.4 手册约定 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
第 2 章 准备工作 3
2.1 运行数据库开发管理工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1 Windows 系统启动运行数据库开发管理工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.2 Linux 系统启动运行数据库开发管理工具 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
第 3 章 连接到数据库 4
第 4 章 创建数据库 9
第 5 章 建模式 12
第 6 章 建表 15
6.1 新建表面板来创建表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
6.2 新建查询来创建表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
6.3 网上商城其他表信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.3.1 地址表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
6.3.2 商品类别表 category . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.3.3 购物车表 cart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
6.3.4 订单表 orders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
6.3.5 订单明细表 orderitem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6.3.6 收货信息表 shopping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
6.3.7 日志信息表 loginfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.4 设置外键 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
第 7 章 添加测试数据 37
7.1 手工添加数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
7.2 文件导入添加数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
I
目 录
7.3 新建查询添加数据 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7.4 其他新增记录 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
第 8 章 数据库开发 52
8.1 函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.1.1 新建函数-添加购物车 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
8.1.2 执行函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.1.2.1 执行结果查看 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.1.3 函数调试 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.1.4 其他函数的信息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.2 存储过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.2.1 新建存储过程-下单 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.2.2 执行存储过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.2.2.1 执行结果查看 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8.2.3 调试存储过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
8.2.4 其他存储过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
8.3 视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.3.1 新建视图-最受用户喜爱的前十名商品 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.3.1.1 查询视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.3.2 新建视图-订单和订单地址表合并查看 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
8.3.2.1 查询视图 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.4 触发器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
8.4.1 新建触发器-新建订单触发添加日志记录 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
8.4.2 执行触发器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
8.5 程序包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.5.1 新建程序包-统计功能程序包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
8.5.2 调试程序包 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
第 9 章 备份与还原 113
9.1 逻辑备份 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
9.2 逻辑还原 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
第 10 章 结束语 118
版权声明 119
服务周期承诺 120
II
第 1 章 前言
1
第 章 前言
网上商城的功能是支持多用户下单购买不同的商品,并邮寄到不同的收货地址,因而需要有用户表、商品表、订
单表等表结构来存储基础数据,同时定义一个视图以方便查询销量前十的商品。为在多平台(iOS、Android 或微信
小程序等)开发时节省类似的业务逻辑代码,将网上商城的关键操作抽象成函数或存储过程,业务开发时直接调用函
数或存储过程即可,抽象出来操作有新增商品到购物车、下订单等,同时将一些统计类的函数封装到程序包内方便调
用。网上商城的日志信息主要通过触发器完成,不需要程序主动干预,降低开发成本。
前言部分包含以下主题:
• 适用读者
• 相关文档
• 术语
• 手册约定
1.1 适用读者
KStudio 快速开发手册面向所有使用 KingbaseES 的用户,主要是数据库管理员和应用程序开发人员。
在开始阅读本文档之前,您需要了解以下内容:
• 《KingbaseES 数据库开发指南》
1.2 相关文档
无
1
第 1 章 前言
1.3 术语
无
1.4 手册约定
本文档中可能出现“注意、提示、警告、另请参阅”等标志,它们所代表的含义如下:
注意: 用于突出重要/关键信息、最佳实践等。
提示: 用于突出小窍门、捷径等。
警告: 用于传递设备或环境安全警示信息,若不避免,可能会导致设备损坏、数据丢失、设备性能降低或其
它不可预知的结果。
另请参阅:
用于突出参考、参阅等。
以下程序代码书写约定适用于本文档:
符号 说明
[] 表示包含一个或多个可选项。不需要输入中括号本身。
{} 表示包含两个以上(含两个)的候选,必须在其中选取一个。不需要输入花括号本身。
| 分割中括号或者花括号中的两个或两个以上选项。不需要输入“|”本身。
... 表示其之前的元素可以被重复。
斜体 表示占位符或者需要提供特定值的变量。
大写 表示系统提供的元素,以便与用户定义的元素相互区分。除出现在方括号中的元素外,应当按
照顺序逐字输入。当然,部分元素在系统中是大小写不敏感的,因此用户可以根据系统说明以
小写形式输入。
小写 表示由用户提供的元素。
2
第2章 准备工作
第 章 2 准备工作
完成 KingbaseES 数据库和数据库开发管理工具(KStudio)的部署安装。
2.1 运行数据库开发管理工具
2.1.1 Windows 系统启动运行数据库开发管理工具
Windows 中启动数据库开发管理工具的三种方式如下所示:
1. 命令行进入到安装目录下 $InstallDir/ClientTools/guitools/KStudio,执行./KStudio,启动数据库开发管理工
具。
3
第3章 连接到数据库
第 章3 连接到数据库
在打开的连接窗口上设置连接信息,选择“KingbaseES”,点击“下一步”:
4
第3章 连接到数据库
5
第3章 连接到数据库
6
第3章 连接到数据库
之后点击“完成”按钮完成数据库的连接,左侧“数据库导航”树出现新创建的连接,如下图所示。
依次点击“展开”按钮展开该数据库的详细信息,展开后如下图所示,可以看到数据库的详细信息:
7
第3章 连接到数据库
8
第 4 章 创建数据库
4
第 章 创建数据库
网上商城案例使用名为“onlinemarket”的数据库来存储其具体信息,因此在创建表、创建视图等操作之前先要
创建用于该项目的数据库。
首先,在数据库导航树上展开找到“数据库”节点,右键选择“新建数据库”选项,如下图所示:
找到新出现的“新建数据库”操作面板,在“基本属性”->“名称”上填写数据库的名称“onlinemarket”,保
持默认选择的所属用户、数据库编码方式。
9
第 4 章 创建数据库
填写完成后点击“确定”按钮,KStudio 弹出创建成功的对话框:
同时左侧“数据库导航”树上出现新创建的数据库,如下所示:
10
第 4 章 创建数据库
至此,网上商城案例的数据库创建完成。若需要创建其他数据库,也是一样的操作。
11
第5章 建模式
第 章5 建模式
首先在左侧“数据库导航”树上,展开“onlinemarket”数据库的子节点,在“模式”节点上右键“新建模
式”,详见下图:
然后,在右侧“新建模式”面板上填写模式的名称“market”,点击“确定”按钮创建完成。
12
第5章 建模式
最后,在左侧“数据库导航”树的模式节点,可以看到新创建的模式“market”,如下图所示:
13
第5章 建模式
至此,网上商城的模式创建完毕,下面将进行该示例的具体数据库对象的创建。
14
第 6 章 建表
第 章6 建表
本章节包含以下内容:
• 新建表面板来创建表
• 新建查询来创建表
• 网上商城其他表信息
• 设置外键
表关系结构图如下所示:
15
第 6 章 建表
16
第 6 章 建表
6.1 新建表面板来创建表
假定网上商城中的用户表定义如下表所示,KStudio 是怎样将其在数据库中创建出来呢?
列名 列类型 说明
userid serial 用户 id
password varchar(50) 密码
17
第 6 章 建表
然后,就会出现下图所示的界面,在这里可以设置表的基本属性、分区、约束等信息,用户表只需要关心基础属
性和字段设置,其他默认即可。在基本属性内填入表名 user,然后在字段区域设置用户表的各个字段信息,字段的类
型可在下拉列表中选择。
18
第 6 章 建表
其次,用户表的其他字段参考上述方式添加后,用户表的信息已经填写完成,如下图所示。
19
第 6 章 建表
添加主键约束,到左侧选项卡上选择“约束”面板,如下图所示:
点击上方的“新增”按钮,填写内容如下,主键包含的列通过如下图所示方式选择,可以设置联合主键,此处选
20
第 6 章 建表
择 userid 作为主键列,接下去的每一个表都会创建主键约束。
最后,点击“确定”即可完成用户表的创建,弹出成功的提示信息如下所示:
至此,用户表已经创建完成,通过该方式可以创建其他的表,下面演示另一种创建表的方式。
21
第 6 章 建表
6.2 新建查询来创建表
假定网上商城中的商品表定义如下表所示,可以通过 SQL 语句将其创建出来。
列名 列类型 说明
首先,单击左侧“数据库导航”树中节点数据库->onlinemarket-> 模式->market,再点击顶部的“新建查询”
按钮,会出现查询窗口,如下所示:
22
第 6 章 建表
23
第 6 章 建表
24
第 6 章 建表
最后,在左侧“数据库导航”树的“表”节点中可以看见刚刚创建的商品表,若没有主动刷新出来,可以在
“表”节点上右键选择“刷新”按钮,这样就可看到新创建的商品表了。
至此,商品表已经通过新建查询的方式创建完成,其他表的创建也可以通过这种方式来完成。值得一提的是“新
建查询”功能提供的 SQL 编辑器功能强大,不仅仅可以执行创建表的操作,其他任何 SQL 操作都可以在这里完成,
底部面板也会实时显示执行结果;同时也支持执行计划、执行日志的操作,更加详尽的功能说明请参见《KStudio 数
据库开发工具用户使用手册》。
25
第 6 章 建表
6.3 网上商城其他表信息
6.3.1 地址表
列名 列类型 说明
26
第 6 章 建表
列名 列类型 说明
列名 列类型 说明
userid int4 用户 id
proid int4 商品 id
quantity int4 数量
27
第 6 章 建表
列名 列类型 说明
28
第 6 章 建表
列名 列类型 说明
id serial 子订单编号
29
第 6 章 建表
列名 列类型 说明
30
第 6 章 建表
列名 列类型 说明
6.4 设置外键
针对 product 表设置外键,product 表中的分类编号是与 category 表相关联的,在 product 表上右键选择“编辑
表”,如下图所示:
31
第 6 章 建表
在左侧“外键”选项卡上点击,如下图所示:
点击“新建”按钮,设置“列”,点击如下图所示的...
32
第 6 章 建表
弹出如下界面,选择“cateid”到右侧,点击“确定”按钮,“列”字段值选择完毕
“依赖表”选择 market.category,如下图所示
33
第 6 章 建表
然后选择“依赖列”,点击…按钮,在弹出框内选择 cateid
34
第 6 章 建表
点击“确定”按钮,即可创建外键完成。
其他外键的创建:
35
第 6 章 建表
以上外键创建完毕。
36
第7章 添加测试数据
第 章7 添加测试数据
现在,网上商城案例的所有表结构已经创建完毕了,下一步需要创建视图、函数、触发器等数据库对象,但在创
建这些数据库对象之前,先灌入一些测试数据,方便后面的功能验证。
灌入数据的方式可以分为三种:
• 第一种是手工添加数据
• 第二种是通过文件导入添加数据
• 第三种是通过新建查询添加数据
• 其他新增记录
7.1 手工添加数据
这种方式适合于添加几条简易数据,操作比较直观但效率低下。
37
第7章 添加测试数据
38
第7章 添加测试数据
然后,在带有底色的那条记录内,填入下表所示的用户信息:
最后,填写完之后点击左上角的“保存”按钮进行记录的保存操作,如下图所示:
39
第7章 添加测试数据
40
第7章 添加测试数据
KStudio 会自动显示出查询结果,具体如下图所示:
7.2 文件导入添加数据
KStudio 支持更高效的文件导入(具体可参考《KStudio 数据库开发工具用户使用手册》),可以方便快速导入
大量数据用于后面的函数、存储过程的测试,或是应用程序的测试。
41
第7章 添加测试数据
42
第7章 添加测试数据
然后在弹出的界面中选择导入类型为 csv,点击下一步,如下图所示:
43
第7章 添加测试数据
44
第7章 添加测试数据
KStudio 弹出“表映射”窗口,确认是要导入的用户表信息,点击“下一步”继续操作:
45
第7章 添加测试数据
KStudio 弹出“数据传输设置”界面,这里保持默认选项即可,点击“下一步”继续执行:
46
第7章 添加测试数据
KStudio 最终弹出“检查结果”界面,在这个界面可以做最后的数据导入的检查,确认无误后点击“开始”按钮
进行导入操作,如下图所示:
47
第7章 添加测试数据
最后,数据导入成功。
48
第7章 添加测试数据
7.3 新建查询添加数据
在上一章节中提到“新建查询”功能支持任意 SQL 的支持,所以也可以通过该功能做测试数据的导入。
49
第7章 添加测试数据
最后可以通过上一小节提到的“查询数据”功能查看刚刚插入的新记录,见下图所示。
至此,三种添加表记录的方式介绍完毕,为了后续网上商城案例的函数、触发器等功能的正常测试,需要灌入额
外的一些数据,比如商品表新增一些商品,商品分类表也要增加新类别等,这些操作不再赘述,表记录信息参考下一
小节,请自行添加到相应的表中。
50
第7章 添加测试数据
7.4 其他新增记录
商品分类表 category 增加如下记录:
51
第 8 章 数据库开发
8
第 章 数据库开发
本章节包含以下内容:
• 函数
• 存储过程
• 视图
• 触发器
• 程序包
8.1 函数
网上商城主要的功能是用户选择商品添加到购物车,挑选结束后提交订单。商品加入购物车的操作可以抽象成一
个函数,通过加入购物车操作可以了解到如何通过 KStudio 来进行函数的添加。
8.1.1 新建函数-添加购物车
加入购物车函数的具体信息如下表所示:
函数 addtocart
功 能 描 商品加入购物车
述
操 作 的 购物车表:每条记录对应了某个用户加入到购物车的某一件商品、该商品的数量和是否被选中要购买
表 的标记
实 现 原 往购物车表内增加记录,或修改现有记录内的商品数量,并选中该商品要购买
理
52
第 8 章 数据库开发
下面演示该函数的创建过程,首先,在左侧“数据库导航”树上“数据库”->“onlinemarket”->“模式”->
“market”->“函数”上右键选择“新建函数”,如下图所示:
依据加入购物车函数的说明,需要如下表所述的三个参数,因此在“参数面板”上增加函数的这三个参数,如下
图所示:
53
第 8 章 数据库开发
AS
tempcount integer default 0;
begin
select count(1) into tempcount from cart where userid=user_id and proid=product_id;
if tempcount > 0 then--如果购物车中已经有此商品,则将购物车内此商品的数量进行增加
update cart set quantity=quantity+product_quantity where userid=user_id and proid=product_id;
else -- 购物车中无此商品,那么就新增一条购物车商品数据
insert into "cart" (userid, proid, quantity, checked,
"createtime", "updatetime") values(user_id, product_id, product_quantity, true, now(), now());
end if;
return true;
exception
when others then
return false;
END
54
第 8 章 数据库开发
此时,完成了加购物车函数的创建,整体截图如下:
55
第 8 章 数据库开发
最后,点击“确定”按钮添加完成,弹出创建成功的对话框如下所示。
56
第 8 章 数据库开发
8.1.2 执行函数
在 左 侧 “数 据 库 导 航” 树 的 “数 据 库”->“onlinemarket”->“模 式”->“market”->“函 数”->“addto-
cart”节点上右键选择“执行函数”:
57
第 8 章 数据库开发
在弹出的对话框内填写入参信息,如下图所示:
58
第 8 章 数据库开发
然后,点击“确定”按钮进入到函数调用的脚本页面,点击“执行”按钮进行“加入购物车”函数调用操作,如
下图所示:
函数执行后打印输出为“t”如下图所示,表示加入购物车成功:
59
第 8 章 数据库开发
8.1.2.1 执行结果查看
“函数执行”功能演示完毕,现在查看 cart 表的记录是否有添加,有则证明添加至购物车操作成功。在“数据
库”->“onlinemarket”->“模式”->“market”->“表”-> “cart”节点上右键选择“查询数据”
60
第 8 章 数据库开发
打开后界面如下,购物车内新增了一条记录:
61
第 8 章 数据库开发
至此,创建函数、函数执行的功能已经演示完毕,其他函数也可以仿照上述步骤完成创建或执行。
8.1.3 函数调试
针对上面刚刚创建的 addtocart 函数进行调试,首先准备数据,上一步已经将商品编号为 1 的商品加入到用户
编号为 1 的用户购物车内,此记录保持住,代表某个用户已经加入某个商品到购物车了,如果再次执行加入购物车操
作,则应跳转到增加购物车中此商品数量的分支上去执行。
以上购物车数据准备完成,下面进行“添加购物车 addtocart”函数的调试步骤
在“数据库”->“onlinemarket”-> 模式->“market”->“函数”->“addtocart”上右键选择“调试”选项
62
第 8 章 数据库开发
63
第 8 章 数据库开发
点击“确定”进入到调试页面,整体截图如下:
64
第 8 章 数据库开发
点击工具栏中的“开始调试” 按钮,进行函数的调试,点击后界面发生如下变化
65
第 8 章 数据库开发
执行工具栏中的“单步跳过” 按钮执行到下一步
继续单击“单步跳过”按钮进行参数变量的赋值
66
第 8 章 数据库开发
67
第 8 章 数据库开发
68
第 8 章 数据库开发
继续“单步跳过”一直到此函数运行完成。运行结束后,到购物车表中查看商品数量是否有增加,如下图所示商
品数量增加为 5 了:
69
第 8 章 数据库开发
8.1.4 其他函数的信息
在商品详情展示的时候,需要显示商品的当月销售量
函数 monthsale
功能描述 商品的当月销量
操作的表 订单详情表
创建过程参考上一章节,内容填写如下:
“基础属性”面板填写名称(monthsale)、返回值类型(integer 类型,代表返回当月的销量值)、模式和属主
保持默认
函数参数代表指定的商品 id,目的就是为了获取此指定商品的月销量:
函数 SQL 内容:
AS
quantity integer;
70
第 8 章 数据库开发
整体截图如下:
点击“确定”按钮完成添加:
71
第 8 章 数据库开发
调用函数,在左侧“数据库导航”树节点“数据库”->“onlinemarket”-> 模式->“market”->“函数”->
“monthsale”上右键选择“执行函数”:
72
第 8 章 数据库开发
73
第 8 章 数据库开发
点击“确定”按钮后,出现脚本窗口,点击执行按钮即可执行此函数,输出商品 1 的当月销量:
74
第 8 章 数据库开发
8.2 存储过程
用户针对购物车中的商品进行下单操作,这里我们将下单抽象出一个存储过程,通过创建新订单的操作可以了解
如何通过 KStudio 来创建存储过程。
8.2.1 新建存储过程-下单
下订单的存储过程具体描述如下。
75
第 8 章 数据库开发
存 储 neworder
过程
功 能 购物车中选中的商品进行下单操作
描述
操 作 商品表:商品库存减少指定的数量
的表 购物车表:对应选中的商品记录进行清空
订单表:增加订单记录
订单地址表:增加订单地址记录
订单详情表:增加订单详情记录
实 现 传入用户编号和地址编号,会将用户对应的购物车内选中的商品进行下单操作
原理
下面介绍存储过程的创建过程:
在“数据库导航”树节点“数据库”->“onlinemarket”->“模式”->“market”->“存储过程”上右键选择
“新建存储过程”选项
76
第 8 章 数据库开发
创建面板上“基础属性”填写名称为“neworder”,模式和属主保持默认值
“参数”面板增加四个参数,前两个为入参,后两个为出参,入参:user_id(用户编号,针对哪个用户的购物
车进行下单操作),address_id(用户下单时选择的地址编号),success 作为 OUT 出参,代表新订单创建是否成
功,orderid 出参(如果成功创建订单,则返回订单的 id),编写参数如下图所示:
77
第 8 章 数据库开发
表 8.2.1: 参数
SQL 内容:
AS
declare
cart_ids integer[];
mypro_id integer;
myquantity integer;
mystock integer;
totalpayment decimal(20,2) default 0.00;
myprice decimal(20,2) default 0.00;
pro_ids integer[];
quantitys integer[];
realname varchar(50);
telephone varchar(50);
province varchar(50);
city varchar(50);
district varchar(50);
address text;
shoppingid_int integer;
orderid_int integer;
myproid integer;
myproname varchar(50);
myproprice decimal(20,2) default 0.00;
78
第 8 章 数据库开发
BEGIN
/**
* 1. 获取用户购物车内选择的商品, 将相应信息放到数组中
* 2. 将商品的库存减去购物车内设置的值
* 3. 将订单表增加一条订单记录
* 4. 将订单详情表增加购物车内的商品
*/
/* 获取收货地址信息, 插入到订单收货地址表中 */
select realname,telephone,province,city,district,address into realname,telephone,province,city,district,
address from address where addressid=address_id limit 1;
-- 增加订单收货地址表信息
insert into shopping(userid,orderid,receivername,receiverphone,receiverprovince,receivercity,
receiverdistrict,receiverstreet,createtime,updatetime) values
(user_id,orderid_int,realname,telephone,province,city,district,address,now(),now());
-- orderitem 表进行增加
for i in 1..array_length(pro_ids,1)
loop
select proid,name,price into myproid,myproname,myproprice from product where proid=pro_ids[i];
insert into orderitem(orderid,userid,proid,proname,currentunitprice,quantity,totalprice,createtime,
updatetime) values
(orderid_int,user_id,myproid,myproname,myproprice,quantitys[i],quantitys[i]*myproprice,now(),now());
end loop;
success = true;
79
第 8 章 数据库开发
orderid = orderid_int;
else
raise notice '购物车为空';
success = false;
end if;
exception
when others then
success = false;
END
整体截图如下:
点击右下角的“确定”按钮创建完成存储过程。
80
第 8 章 数据库开发
以上关于“添加新订单”的存储过程创建完毕,可以使用“执行存储过程”的方式调用创建的存储过程,调用完
毕后可以去相应的订单表、订单详情表中查看数据是否有对应的变动。
8.2.2 执行存储过程
在 左 侧 “数 据 库 导 航” 树 的 “数 据 库”->“onlinemarket”->“模 式”->“market”->“存 储 过 程”->
“neworder”节点上右键,选择“执行存储过程”, 如下图所示:
81
第 8 章 数据库开发
82
第 8 章 数据库开发
在脚本中增加一行
可以查看订单是否创建成功,以及创建成功后的订单 id:
83
第 8 章 数据库开发
如果购物车为空,则先执行将商品“加入购物车”的操作,执行“addtocart”函数。然后再执行此新建订单的
操作。
8.2.2.1 执行结果查看
查看执行结果,到 orders 表、orderitem 表中查看记录是否有增加,cart 表是否删除了对应的数据,product 表
的库存量是否有减少,使用“新建查询”功能即可完成,这里不再截图展示。
8.2.3 调试存储过程
存储过程的调试步骤和函数的调试步骤一致。
84
第 8 章 数据库开发
8.2.4 其他存储过程
其他存储过程也是上面的方式去新建即可,下面简述其他的存储过程。
存储过程 categorysales
功能描述 统计某个类别的商品们在指定时间内的销售额
操作的表 订单详情表:统计某个类别商品们的销售额
同上一章节的步骤,关于内容填写如下:
基本属性填写:
85
第 8 章 数据库开发
SQL 内容:
AS
prices decimal(20,2)[];
begin
totalprices := 0.0;
prices := array(select totalprice from orderitem where
proid in (select proid from product where cateid=categoryid)
and createtime>starttime and createtime<endtime);
if(array_length(prices, 1) > 0) then
for i in 1..array_length(prices, 1)
loop
totalprices := totalprices+prices[i];
end loop;
end if;
END
以上创建分类销售额的存储过程完毕。
执行此存储过程,在该存储过程上右键“执行存储过程”
86
第 8 章 数据库开发
点击确定,在脚本中编写增加一行
打印销售额结果
87
第 8 章 数据库开发
打印输出商品分类 1 在指定时间内的总销售额。
以上存储过程介绍完毕,下面进行视图的创建说明。
8.3 视图
为了应用程序的查看方便,可以通过视图对表数据进行封装,下面介绍视图的创建
8.3.1 新建视图-最受用户喜爱的前十名商品
在“数据库”->“onlinemarket”->“模式”->“market”->“视图”树节点上右键“新建视图”, 如下图所示
88
第 8 章 数据库开发
输入视图的基本属性,名称为 likeproducttop10,其他保持默认:
SQL 内容:
SELECT o.proid,
sum(o.quantity) AS totalquantity
FROM market.orderitem o
GROUP BY o.proid
ORDER BY (sum(o.quantity)) DESC
LIMIT 10;
整体截图如下:
89
第 8 章 数据库开发
点击“确定”完成视图的创建
8.3.1.1 查询视图
调用创建的视图查看最受欢迎的 10 件商品,点击工具栏上的“新建查询”,在脚本编辑的面板上输入如下命
令:select * FROM likeproducttop10;
90
第 8 章 数据库开发
8.3.2 新建视图-订单和订单地址表合并查看
同上一节的步骤,在“视图”节点上右键“新建视图”。
基本属性填写如下:
SQL 内容填写如下:
SELECT o.orderid,
o.userid,
o.payment,
o.status,
o.paymenttime,
o.sendtime,
o.endtime,
o.closetime,
o.createtime,
o.updatetime,
s.shoppingid,
s.receivername,
91
第 8 章 数据库开发
s.receiverphone,
s.receiverprovince,
s.receivercity,
s.receiverdistrict,
s.receiverstreet
FROM (market.orders o
LEFT JOIN market.shopping s ON ((o.orderid = s.orderid)));
8.3.2.1 查询视图
点击“确定”创建视图,查询编写的 orderandshopping 视图,就在“新建查询”的面板上执行:select * FROM
orderandshopping ;
8.4 触发器
这里通过添加日志记录的方式来设置触发器,用户会有登录登出、下单、付款等操作,在进行这些操作的时候需
要将这些操作记录下来,由此可以通过触发器功能来实现,下面以新建订单就会添加日志记录到日志表中来了解使用
KStudio 创建触发器。
92
第 8 章 数据库开发
8.4.1 新建触发器-新建订单触发添加日志记录
功能描述:orders 表在新插入数据之后会触发写日志记录的操作,在左侧导航树节点“数据库”->“onlinemar-
ket”->“模式”->“market”->“触发器”上右键“新建触发器”
填写基本属性:触发器名称:newordertrigger,基于表:orders,触发时机:after,触发类型:insert,类型:
row,状态为 enable。如下图所示:
93
第 8 章 数据库开发
SQL 内容:
AS
BEGIN
insert into loginfo(loglevel, logtype, logdetail, logtime) values (1,'neworder','add new order into
orders',now());
END;
整体截图如下:
94
第 8 章 数据库开发
点击“确定”按钮完成触发器的生成。
8.4.2 执行触发器
检查此触发器的方式,第一步,添加商品到购物车,在“数据库”->“onlinemarket”->“模式”->“market”
->“函数”->“addtocart”上右键执行此函数,入参填写(user_id:1,product_id:1,product_quantity:2), 具体
步骤参见新建函数-添加购物车 章节;第二步,在“数据库”->“onlinemarket”->“模式”->“market”->“存储
过程”->“neworder”上右键调用新建订单的存储过程, 入参填写(user_id:1,address_id:1),具体步骤参见新建存
储过程-下单 章节。在创建订单的时候会对订单表 orders 进行插入数据的操作,由此触发日志的写入。
95
第 8 章 数据库开发
96
第 8 章 数据库开发
8.5 程序包
以一个统计功能的程序包为例,说明 KStudio 对程序包功能的使用方法。
8.5.1 新建程序包-统计功能程序包
这里将要创建一个基于统计功能的程序包,统计用户的购买力(在指定时间内某个用户消费的金额),统计分类
购买力(某个分类商品在指定时间内的销售额)。下面进行程序包的编写,在“数据库”->“onlinemarket”->“模
式”->“market”->“程序包”节点上右键选择“新建程序包”
97
第 8 章 数据库开发
基本属性填写如下,名称为 statistic,模式和执行身份保持默认即可
AS
function userPaymentPower(user_id integer, starttime datetime, endtime datetime) returns numeric;
function categoryPayment(categoryid integer, starttime datetime, endtime datetime) returns numeric;
end
AS
function userPaymentPower(user_id integer, starttime datetime, endtime datetime) returns numeric as
userpaymenttotal numeric ;
userpaymentnum integer := 0;
begin
select count(1) into userpaymentnum from orderitem where userid=user_id and createtime>starttime and
createtime<endtime;
if userpaymentnum>0 then
select sum(totalprice) into userpaymenttotal from orderitem
98
第 8 章 数据库开发
整体截图如下:
99
第 8 章 数据库开发
点击右下角的“确定”按钮,程序包即创建完成。
8.5.2 调试程序包
在刚创建的程序包上,“数据库”->“onlinemarket”->“模式”->“market”->“程序包”->“statistic”上
右键选择“调试”。
100
第 8 章 数据库开发
101
第 8 章 数据库开发
在“内部函数名”下拉菜单中选择调试“categorypayment(int4,datetime,datetime)”函数,同时填写输入参
数,categoryid 填写为 1,starttime 和 endtime 根据实际情况填写,如下图所示:
点击“确定”按钮进入到调试页面,如下图所示的界面:
102
第 8 章 数据库开发
点击“开始调试”按钮 进入到程序包的调试,开始调试后页面显示如下:
103
第 8 章 数据库开发
添加完断点之后,点击顶部工具栏的“继续” 按钮可将代码执行到断点处,如下所示:
104
第 8 章 数据库开发
右上角的“变量”面板显示变量的值变化,单击“单步跳过” 按钮往下执行
105
第 8 章 数据库开发
106
第 8 章 数据库开发
点击“单步跳过”
107
第 8 章 数据库开发
继续“单步跳入”执行显示如下图:
108
第 8 章 数据库开发
再单击“单步跳过”,会打印出程序包子函数执行的结果,如下图所示:
109
第 8 章 数据库开发
再单击“单步跳过”
110
第 8 章 数据库开发
再单击“单步跳过”,即可结束整个程序包的执行
111
第 8 章 数据库开发
112
第 9 章 备份与还原
9
第 章 备份与还原
本章节包含以下内容:
• 逻辑备份
• 逻辑还原
9.1 逻辑备份
双击左侧树节点“备份”->“逻辑备份”
选择要备份的数据库,点击“备份”按钮进行备份,留意备份的路径
113
第 9 章 备份与还原
备份成功后弹出如下提示框:
9.2 逻辑还原
双击左侧树节点“备份”->“逻辑还原”将数据库进行还原操作
114
第 9 章 备份与还原
选择备份文件:选择好上一步生成的备份文件,选择还原方式为“还原部分备份对象”,填写好要还原的数据
库,树状列表进行勾选不选择 anon 仅仅选择 market 及下属树节点,还原至数据库的下拉菜单请选择要被还原到的
数据库,如下图所示,点击“还原”按钮进行数据库还原操作
115
第 9 章 备份与还原
点击还原按钮后,还原成功弹出对话框如下图所示:
到还原至的数据库中查看对应的表、函数等是否创建存在了。如下图所示,逻辑还原后相应的表、函数、存储过
程等都跟着创建成功了。
116
第 9 章 备份与还原
117
第 10 章 结束语
第 10章 结束语
借助 KStudio 完成网上商城案例的数据库设计开发到此结束,其他数据库的设计可参考上述相应的章节来完成。
118
版权声明
版权声明
北京人大金仓信息技术股份有限公司(简称:人大金仓)版权所有,并保留对本手册及本声明的一切权利。
未得到人大金仓的书面许可,任何人不得以任何方式或形式对本手册内的任何部分进行复制、摘录、备份、修
改、传播、翻译成其他语言、将其全部或部分用于商业用途。
免责声明
本手册内容依据现有信息制作,由于产品版本升级或其他原因,其内容有可能变更。人大金仓保留在没有任何通
知或者提示的情况下对手册内容进行修改的权利。
本手册仅作为使用指导,人大金仓在编写本手册时已尽力保证其内容准确可靠,但并不确保手册内容完全没有错
误或遗漏,本手册中的所有信息也不构成任何明示或暗示的担保。
技术支持
• 人大金仓官方网站:http://www.kingbase.com.cn/
• 人大金仓文档中心:http://help.kingbase.com.cn/
• 全国服务热线:400-601-1188
• 人大金仓技术支持与反馈信箱:support@kingbase.com.cn
119
服务周期承诺
服务周期承诺
由于市场需求在不断变化,技术创新和发展的进程不断加剧,产品的版本更迭不可避免。人大金仓对于产品版本
生命周期的有效管理,有助于您提前规划项目,更好地从产品服务终止上过渡。
表 1: KingbaseES 产品生命周期里程碑
关键里程碑点 定义
停止销售日期 正式停止销售的日期,版本停止接受订单日。该日之后,产品将不再销售。
停止功能升级日期 在该日期之后,不再提供新特性和新硬件支持。但依旧提供错误修复、安全修复、功
能维护等服务。
停止功能维护日期 在该日期之后,不再维护功能,修复问题。但依旧提供安全修复等服务
停止安全维护日期 在该日期之后,不再发布补丁版本修复中高风险漏洞,仅提供有限的支持。
产品服务终止日期 停止提供产品服务和支持的日期。包括软件维护版本,缺陷修复,以及针对该产品的
所有服务支持(包括服务热线和远程/现场支持)。
服务周期策略
1)产品自发布之日起至产品停止功能升级(包含新特性、新硬件支持)之日不少于 5 年。
2)产品停止功能升级之日起至产品停止功能维护(主要包括问题修复)之日不少于 4 年。
3)产品功能维护停止之日起至产品停止安全维护(包括中高风险漏洞修复)之日不少于 2 年。
服务终止策略
120
服务周期承诺
开方式宣布产品服务终止日期。
121