[英]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;
它取決於數據庫引擎,甚至數據庫本身或連接的會話的配置方式。 但是,通常, SQL Server會將age
和"age"
視為相同的標識符,而Oracle會將age
和"age"
視為不同。
關於屬性(列),這些標識符的處理也有很大差異。 大多數數據庫引擎將允許通過引號(或其他分隔符)標識屬性,並以與處理表標識符相同的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.