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