sql - 理解有关 SQL/DDL 查询中 case 的句子

标签 sql database ddl

本题基于this answer .

下面这句话是什么意思?

Finally, don't use mixed case identifiers. Do everything lowercase, so you don't have to quote them.

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

最佳答案

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等不是标识符,它们是保留字。

您可以在任何情况下使用它们。

关于sql - 理解有关 SQL/DDL 查询中 case 的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1199868/

相关文章:

mysql - 不允许 SQL 更新查询

postgresql - 你如何让一个ddl进入postgres

php - MySQL选择复杂子查询作为字段

sql - 仅当匹配所有列表值时才返回行

c# - 如何从 Entity Framework DbContext 收集当前的 SQL Server session ID?

mysql - 如何优化count和group by子查询操作

php - 字段名/列名的动态更新 MySQL/PHP

c++ - 使用Qt5 SQL进行异步数据库访问的策略

oracle - 如何解决SQL错误:ORA-14411

mysql - 外键约束失败