【问题标题】:To understand a sentence about the case in SQL/DDL -queries了解 SQL/DDL 中有关案例的一句话 - 查询
【发布时间】:2009-07-29 20:32:28
【问题描述】:

本题基于this answer

下面这句话是什么意思?

最后,不要使用大小写混合 身份标识。一切都小写, 所以你不必引用它们。

是否意味着我应该将 CREATE TABLE、USER_ID 和 NOT NULL 等命令更改为小写? - 不能,因为这违反了常见的命名约定。

【问题讨论】:

  • 你一直在以惊人的速度“产生”问题,而不是试图处理 PostgreSQL 文档(顺便说一句,这些文档编写和组织得很好)。
  • @Milen:文档没有的部分是评估。我通过评估好代码和坏代码来学习。 - 如果我看到一些令人困惑的东西,我会问。我要理解,不要忽视。
  • 感谢您的回答! - 我会稍微修改他的答案。

标签: sql database ddl


【解决方案1】:

PostgreSQL 中,不带引号的标识符被转换为小写:

CREATE TABLE "MYTABLE" (id INT NOT NULL);

CREATE TABLE "mytable" (id INT NOT NULL);

INSERT
INTO    "MYTABLE"
VALUES  (1);

INSERT
INTO    "mytable"
VALUES  (2);

SELECT  *
FROM    mytable;

---
  2

SELECT  *
FROM    MYTABLE;

---
  2

这两个查询都将返回2,因为它们是针对"mytable" 发出的,而不是"MYTABLE"

要返回1(即针对"MYTABLE"而不是"mytable"发出查询),您需要引用它:

SELECT  *
FROM    "MYTABLE";

---
  1

CREATE TABLE 等不是标识符,它们是保留字。

你可以在任何你喜欢的情况下使用它们。

【讨论】:

    【解决方案2】:

    不,我认为这位先生提到使用所有小写标识符,例如表、列等名称。这应该不会影响您使用的 CREATE TABLE 等命令。

    马克

    【讨论】:

      【解决方案3】:

      我不知道他为什么这么说。至少在 SQL Server 中,标识符的大小写无关紧要。也许在其他 DBMS 系统中也是如此?

      【讨论】:

      • 某些 RDBMS 区分大小写。如果运行服务器的操作系统的底层文件系统区分大小写,则 MySQL MyISAM 表名区分大小写。这是因为在表名和将其内容存储在磁盘上的文件之间存在一对一的映射。这可能会导致 MySQL 表名在 Unix 系统上区分大小写但在 Windows 系统上不区分大小写的奇怪情况!
      • @Ken:谢谢你的评论!
      • 谢谢,Ken,澄清了这一点。
      • MS SQL Server 中是否区分大小写取决于排序规则。我从未使用过具有区分大小写排序规则的数据库,但根据文档,如果数据库的排序规则区分大小写,则标识符将区分大小写。另一个例子,在 Oracle 中,不带引号的标识符被强制为大写,带引号的标识符按原样匹配,并且区分大小写。
      • 你能把它在文档中说的地方贴出来吗?我发现很难相信标识符会根据排序规则更改区分大小写。
      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多