每当我们创建一个表时,我们CREATE TABLE table_name
在任何数据库系统中都被指定为。当我们在 postgre 中创建表时,我们使用
CREATE TABLE "tabl_name"
. " "
当我们在 postgreSql 中使用双引号创建表时有什么区别吗?
3 回答
如果您在表名周围使用双引号,那么您使名称区分大小写。默认情况下,未引用的表名称(和一般标识符)不区分大小写。
因此,例如使用以下不带引号的 create 语句:
CREATE TABLE TestTable...
表示可以使用以下所有内容来引用该表:TESTTABLE、testtable、TestTTabLe
而如果您在 create 语句中使用引号:
CREATE TABLE "TestTable"...
那么只有“TestTable”可以用来引用这个表,其他的都行不通。
该手册包含一个关于这个主题的部分,更详细地解释了它: http ://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
实际上有一些区别。
双引号告诉解析器包含的是区分大小写的标识符,要按字面意思阅读。
这导致了许多差异。您可以执行以下操作:
CREATE TABLE "table" ( ... );
但不是
CREATE TABLE table (...);
它不仅区分大小写(PostgreSQL 将不带引号的标识符折叠为小写),而且它可以包含其他禁止的关键字。
但是,这意味着之后您必须使用以下内容:
SELECT * FROM "table"
但你不能
SELECT * FROM table
如果您只使用小写字母(与 SQL 标准相反,它应该是大写字母),则没有区别。
如果您使用任何不带引号的大写字母,它将被转换为小写。
如果您使用带引号的任何大写字母,则它不会被转换,并且您必须一直使用它来访问此表(或列或任何其他标识符)。
最好不要在标识符中使用引号。