OceanBase 數(shù)據(jù)庫(kù)對(duì)象命名規(guī)則

2021-06-17 18:02 更新

數(shù)據(jù)庫(kù)對(duì)象標(biāo)識(shí)符

每個(gè)數(shù)據(jù)庫(kù)對(duì)象都有名字。在 SQL 語(yǔ)句中您可以使用引用標(biāo)識(shí)符和非引用標(biāo)識(shí)符來(lái)命名任何數(shù)據(jù)庫(kù)對(duì)象:

  • 引用標(biāo)識(shí)符:以雙引號(hào) " " 為開頭和結(jié)尾的標(biāo)識(shí)符。如果使用引用標(biāo)識(shí)符命名 Schema 對(duì)象,則在引用該對(duì)象時(shí)必須使用雙引號(hào)。

  • 非引用標(biāo)識(shí)符:標(biāo)識(shí)符中不包含任何標(biāo)點(diǎn)符號(hào)。

但是,數(shù)據(jù)庫(kù)名稱、全局?jǐn)?shù)據(jù)庫(kù)名稱、數(shù)據(jù)庫(kù)鏈接名稱、磁盤組名稱和可插入數(shù)據(jù)庫(kù)(PDB)始終不區(qū)分大小寫,并以大寫形式存儲(chǔ)。如果使用引用標(biāo)識(shí)符為它們命名,那么引號(hào)將被忽略。

注意 
OceanBase 并不建議您使用引用標(biāo)識(shí)符來(lái)命名數(shù)據(jù)庫(kù)對(duì)象。這些引用標(biāo)識(shí)符在 SQL PLUS 中兼容,但是在其他數(shù)據(jù)庫(kù)對(duì)象管理工具中可能不被識(shí)別。

標(biāo)識(shí)符使用規(guī)則

以下是一些適用于引用標(biāo)識(shí)符和非引用標(biāo)識(shí)符的規(guī)則,除非另有說(shuō)明,否則以下規(guī)則對(duì)引用標(biāo)識(shí)符和非引用標(biāo)識(shí)符同時(shí)適用。

標(biāo)識(shí)符的長(zhǎng)度

標(biāo)識(shí)符的長(zhǎng)度為 1~128 字節(jié)。

如果標(biāo)識(shí)符包含由句點(diǎn)分隔的多個(gè)部分,則每個(gè)部分最長(zhǎng)都可達(dá) 128 字節(jié)。每個(gè)句點(diǎn)分隔符以及旁邊的引號(hào)都算作一個(gè)字節(jié)。例如以下字符串:

"schema"."table"."column"

示例名稱中的三部分 schema、table 和 column 各自最長(zhǎng)可以是 128 字節(jié),每個(gè)引號(hào)和句點(diǎn)都是單字節(jié)字符,所以示例中標(biāo)識(shí)符的總長(zhǎng)度為 392 字節(jié)。

保留字做標(biāo)識(shí)符

非引用標(biāo)識(shí)符不能是 OceanBase SQL 保留字。引用標(biāo)識(shí)符可以是保留字,但不建議這樣做。根據(jù)您計(jì)劃用于訪問(wèn)數(shù)據(jù)庫(kù)對(duì)象的工具不同,名稱可能進(jìn)一步受到其他產(chǎn)品特定的保留字限制。

注意 
保留字 ROWID 是這個(gè)規(guī)則的一個(gè)例外。不能使用大寫單詞 ROWID 作為列的名稱,無(wú)論是帶引號(hào)的還是不帶引號(hào)的。但是,引用標(biāo)識(shí)符作為列名時(shí),不可以使用全大寫單詞,但是可以包含一個(gè)或多個(gè)小寫字母(例如,“Rowid”或“Rowid”)。

特殊含義單詞做標(biāo)識(shí)符

OceanBase 中的 SQL 語(yǔ)言包含了其他具有特殊含義的單詞。這些詞包括數(shù)據(jù)類型、Schema 名、函數(shù)名、虛擬系統(tǒng)表 DUAL 和關(guān)鍵字(SQL 語(yǔ)句中的大寫單詞,如 DIMENSION、SEGMENTALLOCATE、DISABLE 等)。這些詞不是保留字,但是,OceanBase 在內(nèi)部以特定的方式使用它們。因此,如果您使用這些詞作為對(duì)象和對(duì)象部件的名稱,SQL 語(yǔ)句可能會(huì)難以閱讀,并可能導(dǎo)致不可預(yù)測(cè)的結(jié)果。尤其是不要使用 SQL 內(nèi)置函數(shù)的名稱作為 Schema 對(duì)象和用戶自定義函數(shù)的名稱。

ASCII 字符做標(biāo)識(shí)符

在數(shù)據(jù)庫(kù)名稱、全局?jǐn)?shù)據(jù)庫(kù)名稱和數(shù)據(jù)庫(kù)鏈接名稱中您應(yīng)該使用 ASCII 字符集中的字符,因?yàn)檫@些字符擁有跨不同平臺(tái)和操作系統(tǒng)的最佳兼容性。多租戶容器數(shù)據(jù)庫(kù)(CDB)中的通用用戶和通用角色的名稱只能使用 ASCII 字符集中的字符。

密碼中的字符

密碼中可以包含多位字節(jié)的字符,如漢字或中文標(biāo)點(diǎn)等。

標(biāo)識(shí)符的開頭

非引用標(biāo)識(shí)符必須以數(shù)據(jù)庫(kù)字符集中的字母字符開頭。引用標(biāo)識(shí)符可以以任何字符開頭。

標(biāo)識(shí)符中的符號(hào)

非引用標(biāo)識(shí)符只能包含來(lái)自數(shù)據(jù)庫(kù)字符集的字母數(shù)字字符和下劃線(_)。但是用于數(shù)據(jù)庫(kù)鏈接名稱時(shí)可以包含句點(diǎn)(.)和符號(hào) @。引用標(biāo)識(shí)符可以包含任何字符、標(biāo)點(diǎn)符號(hào)和空格。但是,引用標(biāo)識(shí)符和非引用標(biāo)識(shí)符都不能包含雙引號(hào)或空字符(\0)。

對(duì)象名稱在名稱空間中的限制

在同一個(gè)名稱空間中,表、視圖、私有同義詞不能擁有相同的名稱。

標(biāo)識(shí)符的大小寫

非引用標(biāo)識(shí)符不區(qū)分大小寫,OceanBase 將他們存儲(chǔ)為大寫。引用標(biāo)識(shí)符區(qū)分大小寫,所以通過(guò)將名稱括在雙引號(hào)里,在同一命名空間的不同對(duì)象可以擁有以下類型的名稱:

"employees"
"Employees"
"EMPLOYEES"

由于非引用標(biāo)識(shí)符不區(qū)分大小寫,所以 OceanBase 認(rèn)為以下名稱是相同的,他們不能作為同一名稱空間下不同對(duì)象的名字:

employees
EMPLOYEES
"EMPLOYEES"

大寫標(biāo)識(shí)符

存儲(chǔ)或比較大寫的標(biāo)識(shí)符時(shí),每個(gè)字符的大寫形式是通過(guò)應(yīng)用數(shù)據(jù)庫(kù)字符集的大寫規(guī)則來(lái)確定的。由對(duì)話設(shè)置 NLS_SORT 所設(shè)定的特定語(yǔ)言規(guī)則不在考慮的范圍內(nèi)。此行為是將 SQL 函數(shù) UPPER 應(yīng)用于標(biāo)識(shí)符,而不是將函數(shù) NLS_UPPER 應(yīng)用于標(biāo)識(shí)符。

數(shù)據(jù)庫(kù)字符集的大寫規(guī)則被應(yīng)用到自然語(yǔ)言時(shí)可能產(chǎn)生不正確的結(jié)果。例如,德國(guó)小寫字母 ?,它在數(shù)據(jù)庫(kù)字符集大寫規(guī)則中并沒(méi)有對(duì)應(yīng)的大寫形式, 所以當(dāng)含有它的標(biāo)識(shí)符被轉(zhuǎn)換為大寫形式時(shí)它并不會(huì)被轉(zhuǎn)變。

數(shù)據(jù)庫(kù)字符集大寫規(guī)則確保標(biāo)識(shí)符在任何語(yǔ)言配置的會(huì)話中的樣式是相同的。如果希望標(biāo)識(shí)符在某種自然語(yǔ)言中看起來(lái)正確,那么可以通過(guò)引號(hào)來(lái)保留它的小寫形式,或者在使用該標(biāo)識(shí)符時(shí)使用對(duì)應(yīng)語(yǔ)言上正確的大寫形式。

列的名稱

同一表或視圖中的列不能具有相同的名稱。但是,不同表或視圖中的列可以具有相同的名稱。

程序和函數(shù)的名稱

如果同一包中的程序或函數(shù)所包含的參數(shù)的數(shù)量和數(shù)據(jù)類型不同,則它們可以具有相同的名稱。在同一個(gè)包中使用不同的參數(shù)創(chuàng)建具有相同名稱的多個(gè)過(guò)程或函數(shù)稱為重載過(guò)程或函數(shù)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)