sql – 表或列名不能以数字开头?
我尝试创建名为15909434_user的表,其语法如下所示:
CREATE TABLE 15909434_user ( ... ) 当然会产生错误.然后,在我试图用google进行一些研究之后,我发现一篇很好的文章here描述:
好的,现在我知道如何使用这个语法来解决这个问题(在表名上放置双引号): CREATE TABLE "15909434_user" ( ... ) 您可以创建表或列名称,例如“15909434_user”和user_15909434,但是不能使用数字创建表或列名称,而不使用双引号. 那么,我很好奇,背后的原因(除了它是一个惯例).为什么这个惯例应用?是避免语法限制或其他原因吗? 提前感谢您的关注! 解决方法它来自原来的sql标准,通过几层间接最终得到一个标识符开始块,这是几个事情之一,但主要是“一个简单的拉丁字母”.还有其他的东西也可以使用,但如果你想查看所有的细节,请到 http://en.wikipedia.org/wiki/SQL-92并按照实际标准的链接(第85页)使用非数字标识符引导器使得编写解析器来解码sql以便执行更容易和更快速,但引用的表单也是正确的. 编辑:为什么解析器更容易? 解析器的问题更多在SELECT-list子句中,而不是FROM子句.选择列表是从表中选择的表达式列表,这是非常灵活的,允许简单的列名称和数字表达式.考虑以下几点: SELECT 2e2 + 3.4 FROM ... 如果表名和列名可以以数字开头,则为2e2列名称或有效数字(通常在数字文字中允许使用e格式),而在“3”和“4”列是3.4或是数值3.4? 具有标识符以简单的拉丁字母开头的规则(以及一些其他特定的东西)意味着,看到2e2的解析器可以快速辨别出这将是一个数字表达式,与3.4 虽然可以设计一个允许数字领先字符的方案,但是这可能会导致更加模糊的规则(意见),所以这个规则是一个很好的解决方案.如果您先允许数字,那么它总是需要引用,这可以说不是“干净”.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |