以下两个查询之间是否存在差异?
CREATE TABLE alpha(age INTEGER);
和
CREATE TABLE alpha("age" INTEGER);
我读过数据库对象是 INSENSITIVE ,除非它们保留在引号中。 当我尝试将TABLE对象保留在引号中但不适用于属性时,这适用。
我猜原因是属性不是数据库对象。这是对的吗?
如果是,那么属性属于哪个类别,如果不是数据库对象?
答案 0 :(得分:2)
有区别吗?是。
当您不使用引号时,例如:
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
,而不是列出的age
列或表alpha
。
但是,当您使用带引号的标识符创建时:
CREATE TABLE alpha("age" INTEGER);
oracle会创建一个包含小写ALPHA
列的表age
(请查看user_tab_columns
以查看此内容)。所以只有以下内容才能选择它:
select "age" from alpha;
select "age" from "ALPHA";
select "age" from ALPHA;
而不是:
select age from alpha;
答案 1 :(得分:1)
它取决于数据库引擎,甚至数据库本身或连接的会话的配置方式。但是,通常情况下,SQL Server会将age
和"age"
视为相同的标识符,而Oracle会将age
和"age"
视为不同
关于属性(列),对这些标识符的处理也有很大差异。大多数数据库引擎都允许通过引号(或其他分隔符)标识属性,并以与表标识符相同的方式进行标识。