2013-11-03 74 views
4

如何在H2中使用名爲GROUP的列創建表?我剛纔看到一個使用類似[*]的例子,但我似乎無法找到它。H2數據庫列名稱「GROUP」是保留字

+0

我試着用一些數據庫(PostgreSQL,MySQL,SQLite,Apache Derby,HSQLDB)。 _它們都拒絕名爲'group'的列。 –

回答

2

你必須在引號包圍的保留字列名,像這樣

「GROUP」

源(直接鏈接):h2database.com

關鍵詞/保留字

有一個不能用作標識符的關鍵字列表(名稱,列名稱等的表 ),除非它們被引用(包圍 用雙引號)。這份名單是目前:

CROSS,CURRENT_DATE,CURRENT_TIME,CURRENT_TIMESTAMP,DISTINCT, EXCEPT,EXISTS,false,那麼,來自全,GROUP,HAVING,INNER, 相交,IS,JOIN,LIKE,LIMIT減去,自然,不,NULL,ON, 訂單,小學,ROWNUM,SELECT,SYSDATE,SYSTIME,SYSTIMESTAMP,今天, TRUE,UNION,UNIQUE,其中

這個列表中的某些字詞是關鍵字,因爲它們是功能 可用於不兼容的'()',例如 CURRENT_TIMESTAMP。

+2

不要這樣做...請。你最終會傷害自己;只是把它稱爲不是保留字。 – Ben

+1

正如@Ben所建議的那樣,使用保留字不是一個好主意。您始終可以預先修復或後綴列名以使其不被保留。有時候,如果我不能在邏輯上加前綴或後綴列名,我只是使用「the」。像「TheGroup」一樣。但通常情況下,您可以想出一個邏輯前綴或後綴,如「ProductGroup」或「AuthorGroup」(使用表示組的名詞作爲它的前綴)。 – Shiva

4

結尾下劃線

添加尾隨下劃線GROUP_

SQL規範明確承諾沒有關鍵字永遠不會有一個結尾下劃線。因此,您可以確保您使用前導或尾部下劃線創建的任何命名都不會與關鍵字或保留字發生衝突。

我用尾部下劃線命名數據庫中的所有列,約束等。起初似乎有點奇怪,但你習慣看到它。發現有一個很好的副作用:在所有編程以及筆記和電子郵件中,當我看到尾部下劃線時,我知道上下文是數據庫,而不是編程變量或業務術語。

另一個好處是安心。這樣的解決方案可以消除由於關鍵字衝突導致的整個類別的可能的錯誤和奇怪的問題。如果你在想,「沒什麼大不了的 - 要記住和避免幾個SQL關鍵字」,再想一想。有a zillion keywords and reserved words,億元超過一千。


由溼婆的答案是正確的,以及:添加各地名,"GROUP"報價,確實解決問題。缺點是記住添加這些引用會很煩人和麻煩。


進一步提示:對於跨各種SQL數據庫的最大兼容性,做你的命名全部使用小寫。 SQL規範說,所有名字都應該以大寫字母存儲,而容忍小寫字母。但不幸的是一些(最?)數據庫無法遵循這方面的規範。經過幾個小時的各種數據庫的研究,我得出結論,全小寫爲您提供最大的便攜性。

所以其實我建議你命名你的專欄:group_

多字的名字是這樣的:given_name_date_of_first_contact_


,因爲它是版權保護我無法引用SQL規範,不幸。在SQL:2011規範中,閱讀部分5.4 名稱和標識標題下的語法規則第3條注111.在SQL-92請參見第5.2節第11條。只需搜索字underscore即可使用。

+0

您可以引用受版權保護的作品;合理使用允許您引用非實質性的部分,只要您指明作品的來源,並且不要複製「實質性」金額...... – Ben