SQL:2016标准概念之数据表
作者: 不剪发的Tony老师
毕业于北京航空航天大学,十多年数据库管理与开发经验,目前在一家全球性的金融公司从事数据库架构设计。CSDN学院签约讲师以及GitChat专栏作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
文章目录
我在 CSDN 学院发布的 SQL 入门视频教程。
表(table)是零个或多个数据行(row)的集合,数据行包含一个或多个列(column)。一般而言,表中的数据行是无序的;但是,包含order by子句的查询返回的结果是有序的。每个列都拥有一个名称和数据类型。每一行都包含每个列 C 的一个值,而且列 C 的数据类型就是该值的数据类型。
由所有表变量组成的 SQL 数据,称为基表(base table)。引用零个或多个基表并返回一个结果表的操作称为查询(query)。查询的结果成为派生表(derived table)。派生表中的行可能是有序的。
一个表中的行也拥有一个数据类型,称为“行类型”(row type);一个表中的所有行都属于同一个行类型,也就是该表的行类型。基于某种结构化类型声明的表也称为“类型表”(typed table);它的列拥有与结构化类型的属性相对应的名称和类型。类型表还包含一个额外的列,称为“自引用列”(self-referencing column),它的类型是与该表的结构化类型关联的引用类型。
如果一个类型表 TB1 关联的结构化类型为 TP1,而 TP1 是另一个结构化类型 TP2 的子类,同时类型表 TB2 关联的结构化类型为 TP2,那么 TB1 可以被称为 TB2 的“子表”(subtable);而且,TB2 被称为 TB1 的“超表”(supertable)。
视图(view)是一个拥有名字的查询,可以通过该名字进行调用。这种调用的结果成为视图表(viewed table)。
某些查询,包括某些视图,是可更新的(updatable),意味着它们可以作为某些更新SQL数据的语句的结果。以这种方式生产的结果变更将会修改到相应的基表。
一个基表(或视图表)的任何两个字段都不能同名。派生表(而不是视图表)可能包含多个同名的列。
一个基表属于一个模式对象(它的描述符位于一个模式内)或者模块对象(它的描述符位于一个模块内)。模式内的基表被称为创建的基表(created base table),它可以是持久化的,也可以是临时性的(它的描述符总是持久化的)。一个持久性基表(persistent base table)包含零行或多行持久化的SQL数据。持久性基表可以是常规持久性基表(regular persistent base table)或者系统版本表(system-versioned table)。系统版本表与常规持久性基本主要存在以下两点区别:
系统版本表包含两个日期时间类型的列,它们的值是系统自动生成的。
在系统版本表上执行维护这些列的更新和删除操作可能会产生额外的副作用。
在模块中定义的基表一定是一个临时表,被称为声明性的本地临时表(declared local temporary table)。
临时表(temporary table)是一个 SQL 会话对象,无法从其他 SQL 会话进行访问。全局临时表(global temporary table)可以从任何关联的 SQL 客户端模块进行访问。本地临时表(local temporary table)只能从它的本地模块进行访问。
在 SQL 会话初始化时,临时表为空;根据定义的不同,临时表在 SQL 事务结束或者 SQL 会话终止时被清空(也就是删除所有行)。