SQL:2016標(biāo)準(zhǔn)概念之?dāng)?shù)據(jù)表
作者: 不剪發(fā)的Tony老師
畢業(yè)于北京航空航天大學(xué),十多年數(shù)據(jù)庫(kù)管理與開(kāi)發(fā)經(jīng)驗(yàn),目前在一家全球性的金融公司從事數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì)。CSDN學(xué)院簽約講師以及GitChat專欄作者。csdn上的博客收藏于以下地址:https://tonydong.blog.csdn.net
文章目錄
我在 CSDN 學(xué)院發(fā)布的 SQL 入門視頻教程。
表(table)是零個(gè)或多個(gè)數(shù)據(jù)行(row)的集合,數(shù)據(jù)行包含一個(gè)或多個(gè)列(column)。一般而言,表中的數(shù)據(jù)行是無(wú)序的;但是,包含order by子句的查詢返回的結(jié)果是有序的。每個(gè)列都擁有一個(gè)名稱和數(shù)據(jù)類型。每一行都包含每個(gè)列 C 的一個(gè)值,而且列 C 的數(shù)據(jù)類型就是該值的數(shù)據(jù)類型。
由所有表變量組成的 SQL 數(shù)據(jù),稱為基表(base table)。引用零個(gè)或多個(gè)基表并返回一個(gè)結(jié)果表的操作稱為查詢(query)。查詢的結(jié)果成為派生表(derived table)。派生表中的行可能是有序的。
一個(gè)表中的行也擁有一個(gè)數(shù)據(jù)類型,稱為“行類型”(row type);一個(gè)表中的所有行都屬于同一個(gè)行類型,也就是該表的行類型?;谀撤N結(jié)構(gòu)化類型聲明的表也稱為“類型表”(typed table);它的列擁有與結(jié)構(gòu)化類型的屬性相對(duì)應(yīng)的名稱和類型。類型表還包含一個(gè)額外的列,稱為“自引用列”(self-referencing column),它的類型是與該表的結(jié)構(gòu)化類型關(guān)聯(lián)的引用類型。
如果一個(gè)類型表 TB1 關(guān)聯(lián)的結(jié)構(gòu)化類型為 TP1,而 TP1 是另一個(gè)結(jié)構(gòu)化類型 TP2 的子類,同時(shí)類型表 TB2 關(guān)聯(lián)的結(jié)構(gòu)化類型為 TP2,那么 TB1 可以被稱為 TB2 的“子表”(subtable);而且,TB2 被稱為 TB1 的“超表”(supertable)。
視圖(view)是一個(gè)擁有名字的查詢,可以通過(guò)該名字進(jìn)行調(diào)用。這種調(diào)用的結(jié)果成為視圖表(viewed table)。
某些查詢,包括某些視圖,是可更新的(updatable),意味著它們可以作為某些更新SQL數(shù)據(jù)的語(yǔ)句的結(jié)果。以這種方式生產(chǎn)的結(jié)果變更將會(huì)修改到相應(yīng)的基表。
一個(gè)基表(或視圖表)的任何兩個(gè)字段都不能同名。派生表(而不是視圖表)可能包含多個(gè)同名的列。
一個(gè)基表屬于一個(gè)模式對(duì)象(它的描述符位于一個(gè)模式內(nèi))或者模塊對(duì)象(它的描述符位于一個(gè)模塊內(nèi))。模式內(nèi)的基表被稱為創(chuàng)建的基表(created base table),它可以是持久化的,也可以是臨時(shí)性的(它的描述符總是持久化的)。一個(gè)持久性基表(persistent base table)包含零行或多行持久化的SQL數(shù)據(jù)。持久性基表可以是常規(guī)持久性基表(regular persistent base table)或者系統(tǒng)版本表(system-versioned table)。系統(tǒng)版本表與常規(guī)持久性基本主要存在以下兩點(diǎn)區(qū)別:
系統(tǒng)版本表包含兩個(gè)日期時(shí)間類型的列,它們的值是系統(tǒng)自動(dòng)生成的。
在系統(tǒng)版本表上執(zhí)行維護(hù)這些列的更新和刪除操作可能會(huì)產(chǎn)生額外的副作用。
在模塊中定義的基表一定是一個(gè)臨時(shí)表,被稱為聲明性的本地臨時(shí)表(declared local temporary table)。
臨時(shí)表(temporary table)是一個(gè) SQL 會(huì)話對(duì)象,無(wú)法從其他 SQL 會(huì)話進(jìn)行訪問(wèn)。全局臨時(shí)表(global temporary table)可以從任何關(guān)聯(lián)的 SQL 客戶端模塊進(jìn)行訪問(wèn)。本地臨時(shí)表(local temporary table)只能從它的本地模塊進(jìn)行訪問(wèn)。
在 SQL 會(huì)話初始化時(shí),臨時(shí)表為空;根據(jù)定義的不同,臨時(shí)表在 SQL 事務(wù)結(jié)束或者 SQL 會(huì)話終止時(shí)被清空(也就是刪除所有行)。