簡體   English   中英

屬性SQL上的引號

[英]quotation marks on attributes SQL

以下兩個查詢之間有區別嗎?

CREATE TABLE alpha(age INTEGER);

CREATE TABLE alpha("age" INTEGER);

我讀到數據庫對象是case INSENSITIVE,除非它們保持在引號中。 當我嘗試將TABLE對象保留在引號中但不適用於屬性時,這適用。

我猜原因是屬性不是數據庫對象。 這個對嗎?

如果是,那么屬性屬於哪個類別,如果不是數據庫對象?

有區別嗎? 是。

當你不使用引號時,例如:

CREATE TABLE alpha(age INTEGER);

oracle會將該列和表作為UPPERCASE存儲在數據字典中。

換句話說,這些陳述是相同的:

CREATE TABLE alpha(age INTEGER);
CREATE TABLE "ALPHA"("AGE" INTEGER);
CREATE TABLE ALPHA(AGE INTEGER);

此外,表上的任何后續dml / ddl如:

select age from alpha;

在查找對象/列時,將首先轉換為大寫; 所以上面的SQL可以正常工作。 即oracle將查找列AGE和表ALPHA而不是ALPHA的列age或表alpha

但是,當您使用帶引號的標識符創建時:

CREATE TABLE alpha("age" INTEGER);

oracle將使用小寫age的列創建表ALPHA (檢查user_tab_columns以查看此內容)。 所以只有以下內容才能選擇它:

select "age" from alpha;
select "age" from "ALPHA";
select "age" from ALPHA;

並不是:

select age from alpha;

例如: http//sqlfiddle.com/#!4/3084e/1

它取決於數據庫引擎,甚至數據庫本身或連接的會話的配置方式。 但是,通常, SQL Server會將age"age"視為相同的標識符,而Oracle會將age"age"視為不同。

關於屬性(列),這些標識符的處理也有很大差異。 大多數數據庫引擎將允許通過引號(或其他分隔符)標識屬性,並以與處理表標識符相同的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM