oracle 使用了反引号,SQL标准关于反引号(`)的使用是什么?

SQL标准(当前版本是ISO / IEC 9075:2011,在多个部分)没有说明“back-tick”或“反引号”符号(Unicode U 0060或GRAVE ACCENT);它不会将其识别为具有可出现在SQL中的特殊含义的字符。

引用标识符的标准SQL机制具有用双引号括起来的带分隔符的标识符:

SELECT "select" FROM "from" WHERE "where" = "group by";

在MySQL中,可能写成:

SELECT `select` FROM `from` WHERE `where` = `group by`;

在MS SQL Server中,可能写为:

SELECT [select] FROM [from] WHERE [where] = [group by];

SQL标准符号的问题是,C程序员用于在双引号中包含字符串,因此大多数DBMS使用双引号替换标准识别的单引号。但是,那么当你想包围标识符时,就会有一个问题。

微软采取了一种方法; MySQL另一个; Informix允许单引号和双引号的可互换使用,但是如果您想要分隔标识符,则设置环境变量,然后必须遵循标准(字符串使用单引号,标识符使用双引号); DB2只遵循标准,AFAIK; SQLite似乎遵循标准; Oracle似乎也遵循标准; Sybase看起来允许双引号(标准)或方括号(与MS SQL Server一样 – 这意味着SQL Server可能也允许双引号)。这page文档所有这些服务器(并有助于填补我的知识的空白),并注释分隔标识符内的字符串是否区分大小写。

至于何时使用标识符的引用机制,我的态度是“永不”。嗯,不是永远不会,但只有当绝对强迫这样做。

请注意,分隔标识符区分大小写;也就是说,“from”和“FROM”是指不同的列(在大多数DBMS中 – 参见上面的URL)。大多数SQL不区分大小写;它是一个麻烦知道使用哪种情况。 (SQL标准有一个大型机方向 – 它期望名称转换为大写;但大多数DBMS将名称转换为小写)。

一般来说,您必须将是关键字的标识符分隔到您正在使用的SQL版本。这意味着Standard SQL中的大多数关键字,以及作为您正在使用的特定实现的一部分的任何附加信息。

一个持续的麻烦来源是升级,其中版本N中不是关键字的列名称成为版本N 1中的关键字。升级之前工作的现有SQL将停止工作。然后,至少作为一个短期措施,你可能被迫引用名称。但在正常的事件过程中,你应该避免需要引用标识符。

当然,我的态度着色的事实,Informix(这是我大部分工作)接受这个SQL逐字,而大多数DBMS会窒息它:

CREATE TABLE TABLE

(

DATE INTEGER NOT NULL,

NULL FLOAT NOT NULL,

FLOAT INTEGER NOT NULL,

NOT DATE NOT NULL,

INTEGER FLOAT NOT NULL

);

当然,除了演示目的之外,制作这样一个荒谬的桌子的人应该被悬挂,绘制,分割,然后残留物应该修复他们创造的混乱。但是,在客户常规管理的某些限制内,关键字可以在许多上下文中用作标识符。也就是说,它本身就是一种有用的防止未来的形式。如果某个字词成为关键字,则现有代码有可能继续运行,不会受到更改的影响。然而,机制并不完美;您不能创建具有称为PRIMARY的列的表,但可以更改表以添加此类列。有一种特殊的理由,但很难解释。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值