CREATE DATABASE
更新时间:2026-06-24
创建一个新的数据库。
语法
SQL
1 CREATE DATABASE name [ [WITH] [OWNER [=] user_name]
2 [TEMPLATE [=] template]
3 [ENCODING [=] encoding]
4 [LC_COLLATE [=] lc_collate]
5 [LC_CTYPE [=] lc_ctype]
6 [TABLESPACE [=] tablespace]
7 [CONNECTION LIMIT [=] connlimit ]
8 [COMPATIBILITY [=] compatibility ] ]
9 ```
10
11
12
13## 描述
14
15`CREATE DATABASE`创建一个新的数据库。 要创建数据库,您必须是数据库管理员或具有特殊的`CREATEDB`权限。
16
17 默认情况下,创建者成为新数据库的所有者。 数据库管理员可以使用`OWNER`子句创建其他用户拥有的数据库。他们甚至可以创建没有特殊权限的用户所拥有的数据库。具有`CREATEDB`权限的非数据库管理员只能创建自己拥有的数据库。
18
19 默认情况下,将通过克隆标准系统数据库`template1`来创建新数据库。 可以通过写入`TEMPLATE name`来指定其他模板。特别是,通过编写`TEMPLATE template0`,您可以创建一个仅包含PalopgMPP数据库预定义的标准对象的干净数据库。如果希望避免复制任何可能已添加到`template1`的本地安装对象,则此功能很有用。
20
21
22## 参数
23
24该SQL命令参数说明见下
25
26 `name`
27 : 要创建的数据库的名称。
28
29 `user_name`
30 : 拥有新数据库的用户的名称,或者使用默认所有者(执行命令的用户)`DEFAULT`。
31
32 `template`
33 : 创建新数据库的模板的名称,或者`DEFAULT`使用默认模板的模板(`template1`)。
34
35 `encoding`
36 : 在新数据库中使用的字符集编码。 指定字符串常量(例如`'SQL_ASCII'`),整数编码数字或`DEFAULT`以使用默认编码。
37 有关更多信息,请参见字符集支持。
38
39 `lc_collate`
40 : 在新数据库中使用的排序规则(`LC_COLLATE`)。 这会影响应用于字符串的排序顺序,例如在使用`ORDER
41 BY`的查询中,以及在文本列的索引中使用的顺序。 默认设置是使用模板数据库的排序规则。
42 有关其他限制,请参见“注释”部分。
43
44 `lc_ctype`
45 : 在新数据库中使用的字符分类(`LC_CTYPE`)。 这会影响字符的类别,例如小写、大写和数字。 默认值是使用模板数据库的字符分类。
46 有关其他限制,请参见下文。
47
48 `tablespace`
49 : 将与新数据库关联的表空间的名称,或者为`DEFAULT`以使用模板数据库的表空间。 该表空间将是用于在此数据库中创建的对象的默认表空间。
50
51 `connlimit`
52 : 可能的最大并发连接数。 默认值-1表示没有限制。
53
54
55 `compatibility`
56 : 在新数据库中使用的兼容功能。指定字符串常量,目前仅支持常量`emptystr_as_null`。指定`compatibility 'emptystr_as_null'`后,会在新数据库中打开compat_emptystr_as_null参数,该参数功能参见兼容模式说明。
57
58
59注解
60: `CREATE DATABASE`不能在事务块内执行。
61
62 通过将数据库名称指定为模板来复制数据库时,在复制数据库过程中,不能将其他会话连接到模板数据库。 模板数据库的新连接被锁定,直到`CREATE DATABASE`完成。
63
64 对数据库管理员没有强制`CONNECTION LIMIT`。
65
66 为新数据库指定的字符集编码必须与所选的语言环境设置(`LC_COLLATE`和`LC_CTYPE`)兼容。如果语言环境为`C`(或等价的`POSIX`),则所有编码都被允许,但是对于其他语言环境设置,只有一种编码可以正常工作。`CREATE DATABASE`将允许数据库管理员指定`SQL_ASCII`编码,而与语言环境设置无关,但是不建议使用此选项,并且如果将与语言环境不兼容的数据存储在数据库中,则可能会导致字符串函数出现异常。
67
68 编码和语言环境设置必须与模板数据库的设置匹配,除非将`template0`用作模板。 这是因为`COLLATE`和`CTYPE`影响索引的顺序,因此从模板数据库复制的任何索引在具有不同设置的新数据库中都将无效。 但是,已知`template0`不包含任何会受到影响的数据或索引。
69
70
71
72## 示例
73
74要创建一个新的数据库:
75
76 ``` sql
77 CREATE DATABASE scdb;
78 ```
79
80 要创建用户`salesapp`拥有的数据库`sales`并使用`salesspace`的默认表空间:
81
82 ``` sql
83 CREATE DATABASE sales OWNER salesapp TABLESPACE salesspace;
84 ```
85
86 要创建支持ISO-8859-1字符集的数据库`music`:
87
88 ``` sql
89 CREATE DATABASE music ENCODING 'LATIN1' TEMPLATE template0;
90 ```
91
92 在此示例中,仅当`template1`的编码不是ISO-8859-1时才需要`TEMPLATE template0`子句。请注意,更改编码可能还需要选择新的`LC_COLLATE`和`LC_CTYPE`设置。
93
94 要创建兼容空串与null值功能的数据库`cmpt`:
95
96 ``` sql
97 CREATE DATABASE cmpt COMPATIBILITY 'emptystr_as_null';
98 ```
99
100兼容性说明
101: SQL标准中没有`CREATE DATABASE`语句。 数据库等效于目录,目录的创建是实现定义的。
102
103
104
105相关SQL命令
106: ` ALTER DATABASE ` , ` DROP DATABASE `
评价此篇文章
