KingbaseES自动生成列介绍
在KingbaseES中create table语句支持GENERATED column(生成列)。
生成列是一种特别的列类型,它的值基于其他列的值计算得出。因此,生成列之于列,有点像视图之于表的关系。存在两种类型的生成列:存储生成列和虚拟生成列。
存储生成列在数据被写入(插入或更新操作)时进行计算,并且像常规列那样,它们在存储上占据空间。相比之下,虚拟生成列并不占用存储空间,它们的值是在被读取时才计算出来的。从这个角度看,虚拟生成列与视图相似,而存储生成列则类似于物化视图,不同之处在于它们总是自动更新。目前,KingbaseES只支持存储生成列。要创建一个生成列,可以在 CREATE TABLE 语句中使用 GENERATED ALWAYS AS 子句。
例如:
test=# CREATE TABLE score("姓名" varchar(20),"语文" int, "数学" int, "英语" int, "总分" int GENERATED ALWAYS AS ("语文"+"数学"+"英语") STORED);
CREATE TABLE
test=# \d score
数据表 "public.score"
栏位 | 类型 | 校对规则 | 可空的 | 预设
------+----------------------------+----------+--------+-------------------------------------------------------
姓名 | character varying(20 char) | | |
语文 | integer | | |
数学 | integer | | |
英语 | integer | | |
总分 | integer | | | generated always as ("语文" + "数学" + "英语") stored
test=# insert into score values ('小明',89,99,99);
INSERT 0 1
test=# select * from score ;
姓名 | 语文 | 数学 | 英语 | 总分
------+------+------+------+------
小明 | 89 | 99 | 99 | 287
(1 行记录)
test=# insert into score values ('小明',89,99,99,287);
错误: 无法插入到列"总分"
描述: 列"总分"是生成的列.
test=# CREATE TABLE score("姓名" varchar(20),"语文" int, "数学" int, "英语" int, "总分" int GENERATED ALWAYS AS ("语文"+"数学"+"英语") STORED) partition by range ("总分");
错误: 无法在分区键中使用生成的列
第1行... ("语文"+"数学"+"英语") STORED) partition by range ("总分"); ^
描述: 列"总分"是生成的列.
需要注意的是,生成列不能直接接收插入或更新的值。
尽管在 INSERT 或 UPDATE 命令中不能为生成列指定具体的值,使用 DEFAULT 关键字仍然是可行的。
理解列的默认值与生成列之间的区别是重要的:默认值只在行首次插入时计算一次,而生成列则在每次行变动时更新,并且无法被其他值取代。
列的默认值不能引用表中的其他列,而生成列通常会这样做。默认值可以使用易变函数,如random()或当前时间函数,但生成列则不允许这样做。
生成列和包含生成列的表定义还有一些限制:
- 生成表达式只能使用不可变函数,不能使用子查询,也不能以任何方式引用当前行以外的内容
- 生成表达式不能引用另一个生成列或系统表(除了 tableoid)
- 生成列不能设置列默认值或标识定义,也不能作为分区键的一部分
- 外部表可以包含生成列
- 不能基于其他生成列定义一个新的生成列
使用生成列时的其他注意事项包括:
生成列具有与其底层基础列不同的访问权限。因此可以设置权限,以便特定角色只能从生成列读取数据,而不是从底层基础列。
从概念上讲,生成列在BEFORE触发器执行后更新,因此 BEFORE 触发器中对基础列所做的更改将反映在生成列中。然而,反过来,在BEFORE触发器中不能访问生成列。
KingbaseES自动生成列介绍的更多相关文章
- Bootstrap Blazor 组件介绍 Table (一)自动生成列功能介绍
Bootstrap Blazor 是一套企业级 UI 组件库,适配移动端支持各种主流浏览器,已经在多个交付项目中使用.通过本套组件可以大大缩短开发周期,节约开发成本.目前已经开发.封装了 70 多个组 ...
- c# DataGridView在使用DataSource时,只显示指定的列或禁止自动生成列
可通过设置DataGridView控件的AutoGenerateColumns属性来处理. //禁止自动生成列,以下场景会用到:数据源的列超过需要展示的列 this.gridDevice.AutoGe ...
- wpf 通过为DataGrid所绑定的数据源类型的属性设置Attribute改变DataGrid自动生成列的顺序
环境Win10 VS2019 .Net Framework4.8 在wpf中,如果为一个DataGrid绑定到一个数据源,默认情况下DataGrid会为数据源类型的每个属性生成一个列(Column)对 ...
- 如何不让DataGridView自动生成列
如果不想让DataGridView自动生成与数据源对应的列, 只需要把属性AutoGenerateColumns设为false即可. 需要注意: 在界面设计的属性窗口中是看不到AutoGenerate ...
- GNU autotools自动生成Makefile 介绍
一.目的 使用autotools工具来帮助我们自动地生成符合自由软件惯例的makefile(这样就可以像常见的GNU程序一样,只要使用"./configure", "ma ...
- 【转】如何不让DataGridView自动生成列
源地址:https://www.cnblogs.com/hailexuexi/p/3983856.html
- WPF DataGrid自动生成列
<Window x:Class="DataGridExam.MainWindow" xmlns="http://schemas.microsoft.c ...
- c# datagridview禁止自动生成额外列
在某些时候,处于重用pojo的考虑,我们希望在不同的datagridview之间进行复用,这就涉及到pojo中的字段会比有些datagridview所需要的字段多,默认情况下,.net对于pojo中的 ...
- 设置DataGridView不自动创建生成列
DataGridView.AutoGenerateColumns 获取或设置一个值,该值指示是否为数据源中的每一字段自动创建 BoundColumn 对象并在 DataGrid 控件中显示这些对象. ...
- 转载:mybatis自动生成
MyBatis Generator中文文档 MyBatis Generator中文文档地址: http://generator.sturgeon.mopaas.com/ 该中文文档由于尽可能和原文内容 ...
随机推荐
- 服务器网卡,10GE设备相关笔记
连接线 铜线 六类线基本可以满足万兆, 万兆网络一般只在短程使用铜线, 或者完全不用铜线 光纤 根据带宽和距离, 分为OM2, OM3, OM4等, OM2一般用于千兆或者短距离万兆, 长距离万兆使用 ...
- 使用多层RNN-LSTM网络实现MNIST数据集分类及常见坑汇总
1 前言 循环神经网络(Recurrent Neural Network, RNN)又称递归神经网络,出现于20世纪80年代,其雏形见于美国物理学家J.J.Hopfield于1982年提出的可作联想存 ...
- std::shared_ptr 和 std::vector 的结合使用
#include <iostream> #include <string> #include <vector> std::shared_ptr<std::ve ...
- 掌握C语言指针,轻松解锁代码高效性与灵活性
欢迎大家来到贝蒂大讲堂 养成好习惯,先赞后看哦~ 所属专栏:C语言学习 贝蒂的主页:Betty's blog 1. 指针与地址 1.1 概念 我们都知道计算机的数据必须存储在内存里,为了正确地访问这些 ...
- 异步aioredis连接时报错TypeError: duplicate base class TimeoutError问题
版本 python3.11版本,aioredis 2.0.1版本,redis 7.x版本 redis.conf配置文件 daemonize yes bind 0.0.0.0 port 6379 pro ...
- 图片验证码pillow模块
安装下载 pip install pillow 使用 需要引入PIL里面的Image from PIL import Image # mode为采用什么色系,size为大小px,color为颜色 im ...
- 如何拓展jwt返回的数据
默认的返回值仅有token,我们还需在返回值中增加username和id,方便在客户端页面中显示当前登陆用户 通过修改该视图的返回值可以完成我们的需求. 在user/utils.py中,创建 def ...
- java图书管理系统(桌面版本)
运行效果: 注册登陆界面 注册存在的账户时 登陆之后主界面如下 点击图书管理-图书更新界面如下 图书列表 项目说明: 由于平时工作比较忙,也没时间写,可是我在公众号后台看见好多小伙伴讨论,我就抽时 ...
- 简单看下最近的Spring Secrurity、Spring漏洞(CVE-2024-22234、CVE-2024-22243)
最近的这两个cve我看国内很多情报将其评为高危,所以想着去看看原理,看完发现都比较简单,利用要求的场景也相对有限(特别是第一个),所以就随便看下就行了 Spring Security 用户认证绕过(C ...
- zynq7000 I2C RTC 与 串口使用
RS485 串口 测试 硬件上2路串口,其中UART 1对应PS STD IN/OUT,UART 0对应RS485: 图 ‑1 RS485电路,自动转换输入.输出方向 可参考 https://blog ...