首页 > 其他分享 >KingbaseES自动生成列介绍

KingbaseES自动生成列介绍

时间:2024-03-28 15:46:58浏览次数:21  
标签:语文 int 生成 99 score 自动 总分 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触发器中不能访问生成列。

标签:语文,int,生成,99,score,自动,总分,KingbaseES
From: https://www.cnblogs.com/kingbase/p/17931064.html

相关文章

  • KingbaseES LWLock buffer_mapping 等待
    在KingbaseES数据库中,会话在将数据块与共享缓冲池的缓冲区相关联时,会触发“LWLockbuffer_mapping”等待事件。这类事件涉及到一种轻量级锁(lwlock),类似于Oracle中的闩锁。这个锁在不同的数据库中可能有不同的名称,但通常被称为buffer_mapping或BufMappingLock。它主要用于实现对HAS......
  • KingbaseES V8R6集群运维案例之---主备failover切换原因分析
    案例说明:生产环境,KingbaseESV8R6的集群发生failover切换,分析集群切换的原因。适用版本:KingbaseESV8R6集群架构:137.xx.xx.67主原备库137.xx.xx.94原主库137.xx.xx.68vip地址一、日志分析1、分析原备库hamgr.log如下所示,通过原备库hamgr.log日志获取到具体......
  • KingbaseES V8R6数据库运维案例之---用户权限导致的备份恢复故障
    案例说明:由于限制了用户对数据库的访问,导致在执行‘sys_backup.shinit’初始化物理备份时,执行失败。适用版本:KingbaseESV8R6一、问题现象如下所示,执行‘sys_backup.shinit’初始化物理备份:1、执行初始化失败[kingbase@node201bin]$shsys_backup.shinitERROR:Con......
  • 软件测试---自动化测试(黑盒测试)
    一.获取元素定位的方法:selenium主要提供了8种定位元素方法:1.findElement(By.id(元素的id属性名称));2.findElement(By.name(元素的name属性名称));3.findElement(By.linkText(a标签内的全部文本内容(精确查询) ));4.findElement(By.partiallinkText( a标签内......
  • 使用fabric.js框选图片区域并生成svg图
    仍然是在图片上特定区域根据数值显示不同的颜色的需求,改进下代码。增加了测量辅助线、对齐辅助线、生成svg图等,基本满足需求。demo中包括了生成json、svg字符串和下载svg图。<scriptsrc="../plugins/fabric.min.js"></script><scriptsrc="../plugins/aligning_guidelines.......
  • Excel生成随机密码
    针对生成一个8到12位包含大小写字母、数字、以及特殊字符的随机密码的需求,我们可以采用VBA来实现,以确保每种字符至少包含一次,同时随机生成密码长度。下面是一个更贴近需求的VBA函数示例:FunctionGenerateComplexPassword()AsStringDimpasswordLengthAsIntegerDim......
  • Spring AOP 实现《自动自动填充Entity》
    定义注解AutoFill.java/***自定义注解,实现自动填填充功能*/@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public@interfaceAutoFill{OperationTypevalue()defaultOperationType.INSERT;}定义AOPAutoFillAspect.java@Aspect@Co......
  • 两分钟1200帧的长视频生成器StreamingT2V来了,代码将开源
      ChatGPT狂飙160天,世界已经不是之前的样子。新建了人工智能中文站https://ai.weoknow.com每天给大家更新可用的国内可用chatGPT资源发布在https://it.weoknow.com更多资源欢迎关注 广阔的战场,风暴兵在奔跑……prompt:Wideshotofbattlefield,stormtroopersrun......
  • 将markmap生成的svg脑图转为png并下载
    将markmap生成的svg脑图转为png并下载markmap是一个非常方便的库,可以直接将md格式转为思维导图。在开发过程中我发现,目前没有将markmap生成的脑图转为png格式保存的代码或是插件。以下是我给出的解决方案这是一段svg标签,用来生成markmap的容器,具体生成的代码不多赘述。<divc......
  • 《自动机理论、语言和计算导论》阅读笔记:p49-p67
    《自动机理论、语言和计算导论》学习第4天,p49-p67总结,总计19页。一、技术总结1.DeterministicFiniteAutomata(DFA)vsNondeterministicFiniteAutomata(NFA)(1)DFA定义(2)NFA定义A"nonedeterministic"finiteautomatahasthepowertobeinseveralstatesatonce......