Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 参考 » 使用 SQL » SQL 语句 » SQL 语句 (A-D)

 

CREATE DATABASE 语句

此语句用于创建数据库。数据库存储为操作系统文件。

语法
CREATE DATABASE db-filename-string [ create-option ... ]
create-option : 
   [ ACCENT { RESPECT | IGNORE | FRENCH } ]
   [ ASE [ COMPATIBLE ] ]
   [ BLANK PADDING { ON | OFF } ]
   [ CASE { RESPECT | IGNORE } ]
   [ CHECKSUM { ON | OFF } ]
   [ COLLATION collation-label[ ( collation-tailoring-string ) ] ]
   [ DATABASE SIZE size { KB | MB | GB | PAGES | BYTES } ]
   [ DBA USER userid ]
   [ DBA PASSWORD password ]
   [ ENCODING encoding-label ]
   [ ENCRYPTED [ TABLE ] { algorithm-key-spec | OFF } ]
   [ JCONNECT { ON | OFF } ]
   [ PAGE SIZE page-size ]
   [ NCHAR COLLATION nchar-collation-label[ ( collation-tailoring-string ) ] ]
   [ [ TRANSACTION ] { LOG OFF | LOG ON [ log-filename-string ]
       [ MIRROR mirror-filename-string ] } ]
page-size :
2048 | 4096 | 8192 | 16384 | 32768
algorithm-key-spec:
ON
| [ ON ] KEY key [ ALGORITHM AES-algorithm ]
| [ ON ] ALGORITHM AES-algorithm KEY key
| [ ON ] ALGORITHM 'SIMPLE'
AES-algorithm : 
'AES' | 'AES256' | 'AES_FIPS' | 'AES256_FIPS'
key : quoted string
参数

文件名(db-filename-stringlog-filename-stringmirror-filename-string)是包含操作系统文件名的字符串。作为字符串,它们必须用单引号括起来。

  • 如果指定路径,则任何后面跟有 n 或 x 的反斜杠字符 (\) 都必须使用两个。按照 SQL 中的字符串规则,将它们转义可阻止将其解释为换行字符 (\n) 或十六进制数 (\x)。

    对反斜线字符进行转义始终是较为安全的方法。例如:

    CREATE DATABASE 'c:\\databases\\my_db.db'
    LOG ON 'e:\\logdrive\\my_db.log';
  • 如果指定相对路径或者未指定路径,则将在相对于数据库服务器工作目录的位置上创建数据库文件。如果没有指定事务日志文件的路径,则该文件在数据库文件所在的同一目录中创建。建议您在计算机的不同磁盘上分别存储数据库文件和事务日志。

  • 如果未提供文件扩展名,则创建的文件将带有不同的扩展名:对于数据库为 .db,对于事务日志为 .log,对于事务日志镜像为 .mlg

不可以将 utility_db 指定为 db-filename-string。该名称已保留供实用程序数据库使用。请参见使用实用程序数据库

  • ACCENT 子句   此子句用于为数据库指定区分重音。不再支持此子句。使用为 COLLATION 和 NCHAR COLLATION 子句提供的归类定制选项指定区分重音。

    仅当将 UCA(Unicode 归类算法)用于 COLLATION 或 NCHAR COLLATION 子句中指定的归类时,ACCENT 子句才会适用。ACCENT RESPECT 会导致在进行 UCA 字符串比较时考虑字母间重音的差异。例如,e 小于 é。ACCENT FRENCH 类似于 ACCENT RESPECT,只是按照法语规则从右向左来比较重音。ACCENT IGNORE 会导致在进行字符串比较时忽略重音。例如,e 等于 é。

    如果创建数据库时未指定区分重音,用于比较和排序的重音区分缺省设置为不区分,但有一点例外;对于用 UCA 归类创建的日文数据库,重音区分的缺省设置为区分

    有关字符集的详细信息,请参见国际语言和字符集

  • ASE COMPATIBLE 子句   不会创建 SYS.SYSCOLUMNS 和 SYS.SYSINDEXES 视图。缺省情况下,创建这些视图是为了与 Watcom SQL(此软件的版本 4 及更早版本)中可用的系统表兼容。这些视图与 Sybase Adaptive Server Enterprise 兼容性视图 dbo.syscolumns 和 dbo.sysindexes 冲突。

  • BLANK PADDING 子句   SQL Anywhere 在比较所有字符串时都会将它们视为具有可变的长度并存储在 VARCHAR 域。这其中包括与固定长度 CHAR 或 NCHAR 列有关的字符串比较。此外,当数值存储于数据库中时,SQL Anywhere 不会截断或添加尾随空白。

    缺省情况下,SQL Anywhere 将空白视为有效字符。例如,值 'a '(字符 'a' 后跟一个空格)与单个字符串 'a' 不相等。不等比较还会将空白与归类中的任何其它字符同等看待。

    如果启用空格填充(指定 BLANK PADDING ON),则字符串比较的语义更符合 ANSI/ISO SQL 标准。启用空格填充后,SQL Anywhere 会在所有比较中忽略尾随空白。

    在上例中,在采用空格填充的数据库中 'a ' 与 'a' 的相等比较会返回 TRUE。对于采用空格填充的数据库,固定长度的字符串值在由应用程序读取时会以空白进行填充。应用程序针对此类赋值是否会收到字符串截断警告是通过 ansi_blanks 连接选项来控制的。请参见ansi_blanks 选项 [兼容性]

  • CASE 子句   此子句用于为数据库指定是否区分大小写。不再支持此子句。使用为 COLLATION 和 NCHAR COLLATION 子句提供的归类定制选项指定区分大小写。

    CASE RESPECT 会导致在对所有 CHAR 和 NCHAR 数据类型进行字符串比较时区分大小写。使用 UCA 进行比较时,只有在基本字母和重音均相等的情况下,才会考虑字母的大小写。对于所有其它归类,大写字母和小写字母是不同的,例如 a 小于 A,而 A 小于 b,等等。CASE IGNORE 会导致在进行字符串比较时不区分大小写。将大写字母和小写字母视为完全相等。

    如果创建数据库时未指定区分大小写,用于比较和排序的大小写区分缺省设置为不区分,但有一点例外;对于用 UCA 归类创建的日文数据库,大小写区分的缺省设置为区分

    提供 CASE RESPECT 是为了符合 ISO/ANSI SQL 标准。数据库中的标识符始终不区分大小写,即使在区分大小写的数据库中也是如此。

    有关字符集的详细信息,请参见国际语言和字符集

  • CHECKSUM 子句   校验和用于确定是否在磁盘上已修改了数据库页。在您创建启用校验和的数据库时,在将每一页写入磁盘前为其计算校验和。下次从磁盘中读取该页时,就会重新计算该页的校验和,并将其与该页上存储的校验和进行比较。如果校验和不同,说明页面在磁盘中已被修改,并发生错误。在启用了校验和的情况下创建的数据库,也可使用校验和进行校验。可通过执行以下语句来检查创建数据库时是否启用了校验和:
    SELECT DB_PROPERTY ( 'Checksum' );

    如果开启了校验和,则此查询将返回 ON,否则将返回 OFF。缺省情况下,校验和是处于关闭状态的,因此如果省略了 CHECKSUM 子句,则会应用 OFF。

    不管此子句的设置如何,数据库服务器总是为在存储设备(例如可移动驱动器)和 Windows Mobile 上运行的数据库启用校验和,以帮助在数据库文件损坏时尽早地将其检测出来。它也在校验活动进行期间为某些关键页计算校验和。请参见使用校验和检测损坏校验实用程序 (dbvalid)sa_validate 系统过程VALIDATE 语句

  • COLLATION 子句   由 COLLATION 子句指定的归类用于字符数据类型(CHAR、VARCHAR 和 LONG VARCHAR)的排序和比较。归类为所使用的编码(字符集)提供字符比较和排序信息。如果不指定 COLLATION 子句,SQL Anywhere 会根据操作系统语言和编码选择一种归类。

    可以从使用 SQL Anywhere 归类算法(或 Unicode 归类算法 (UCA))的归类列表中选择归类。如果已指定 UCA,则您还应指定 ENCODING 子句。

    谨慎选择归类非常重要。数据库创建完毕之后,将无法再更改归类。请参见选择归类

    有关支持的归类列表,请参见建议的字符集和归类支持的归类和替代归类

    您还可以指定归类定制选项 (collation-tailoring-string),以便能够对字符的排序和比较进行更多的控制。这些选项采用 "关键字=值" 对的形式,包括在圆括号内,位于归类名后。例如,... CHAR COLLATION 'UCA(locale=es;case=respect;accent=respect)'

  • DATABASE SIZE 子句   预先为数据库分配空间有助于降低数据库所在驱动器空间不足的风险。而且,它还可以在数据库服务器有数据库扩充需要之前增加数据库的可存储数据量,从而有助于提高各项性能。扩充数据库是一项非常耗时的操作。可以使用 KB、MB、GB 或 PAGES 将单位分别指定为千字节、兆字节、千兆字节或页。

  • DBA USER 子句   此子句用于为数据库指定 DBA 用户。使用此子句时,可以不再以缺省 DBA 用户的身份连接到数据库。如果不指定此子句,则会创建缺省的 DBA 用户 ID。

  • DBA PASSWORD 子句   可以为 DBA 数据库用户指定一个不同的口令。如果不指定此子句,则 DBA 用户将使用缺省口令 (sql)。

  • ENCODING 子句   在 COLLATION 子句中指定的多数归类会规定编码(字符集)和排序。对于这些归类,不应指定 ENCODING 子句。但是,如果 COLLATION 子句中指定的值为 UCA(Unicode 归类算法),则使用 ENCODING 子句指定特定于区域的编码,并利用 UCA 进行比较和排序。ENCODING 子句可能为 CHARA 数据类型指定 UTF-8 或任何单字节编码。ENCODING 可能不会指定 UTF-8 以外的多字节编码。

    如果选择 UCA 归类,则可以有选择地指定归类定制选项。请参见归类定制选项

    如果将 COLLATION 设置为 UCA 但未指定 ENCODING,SQL Anywhere 将使用 UTF-8。有关建议的编码和归类的详细信息,请参见建议的字符集和归类

    有关如何获得 SQL Anywhere 支持的编码列表的详细信息,请参见支持的字符集

  • ENCRYPTED 或 ENCRYPTED TABLE 子句   加密会使存储数据变为不可读。当您想要加密整个数据库时,请使用 ENCRYPTED 关键字(无 TABLE)。当您只想启用表加密时,请使用 ENCRYPTED TABLE 子句。启用表加密将意味着,会使用您在创建数据库时指定的设置,对随后使用 ENCRYPTED 子句创建或变更的表进行加密。请参见表加密

    有两个级别的数据库和表加密:简单加密和高度加密。简单加密等效于模糊处理。虽然这些数据无法阅读,但了解加密技术的人可能会破解数据。高度加密使数据无法阅读,而且基本上无法被破解。

    对于简单加密,请指定 ENCRYPTED ON ALGORITHM SIMPLE 或 ENCRYPTED ALGORITHM SIMPLE,或者指定 ENCRYPTED ON 子句而不指定算法或密钥。

    对于高度加密,请指定使用 128 位或 256 位 AES 算法的 ENCRYPTED ON ALGORITHM,并指定 KEY 子句来指定加密密钥。建议选择满足以下条件的密钥值:长度至少为 16 个字符,混合使用大小写并包含数字、字母和特殊字符。

    在 Windows Mobile 上,仅 ARM 处理器支持 AES_FIPS 和 AES256_FIPS 算法。

    小心

    对于高度加密的数据库,请务必将密钥的副本保存在安全的位置。如果丢失了加密密钥,就没有办法访问数据,即使有技术支持人员协助也不行。此时必须放弃该数据库并创建一个新的数据库。

    有关高度数据库加密的详细信息,请参见高度加密

    还可以使用 CREATE ENCRYPTED DATABASE 语句为现有数据库创建一个加密副本。请参见CREATE ENCRYPTED DATABASE 语句

  • JCONNECT 子句   要允许 jConnect JDBC 驱动程序访问系统目录信息,请指定 JCONNECT ON。这将会安装提供 jConnect 支持的系统对象。如果要排除 jConnect 系统对象,请指定 JCONNECT OFF。只要不访问系统信息,您就仍然可以使用 JDBC。缺省情况下,JCONNECT 为 ON。

    如果要创建在 Windows Mobile 上使用的数据库,请参见在 Windows Mobile 上使用 jConnect

  • NCHAR COLLATION 子句   由 NCHAR COLLATION 子句指定的归类用于国家字符数据类型(NCHAR、NVARCHAR 和 LONG NVARCHAR)的排序和比较。归类为用于国家字符的 UTF-8 编码(字符集)提供字符排序信息。如果不指定 NCHAR COLLATION 子句,则 SQL Anywhere 将使用 Unicode 归类算法 (UCA)。唯一允许使用的其它归类为 UTF8BIN,它提供编码大于 0x7E 的所有字符的二进制排序。请参见选择归类

    您还可以指定归类定制选项 (collation-tailoring-string),以便能够对字符的排序和比较进行更多的控制。这些选项采用 "关键字=值" 对的形式,包括在带引号的字符串中,位于归类名后。例如,... NCHAR COLLATION 'UCA(locale=es;case=respect;accent=respect)'。如果指定 ACCENT 或 CASE 子句以及包含大小写和重音设置的归类定制字符串,ACCENT 和 CASE 子句的值将只作为缺省值使用。

    有关支持的归类定制选项的列表,请参见归类定制选项

    注意

    如果指定 UCA 归类,将支持所有归类定制选项。对于所有其它归类,仅支持区分大小写定制选项。

    注意

    使用归类定制选项创建的数据库,无法使用 10.0.1 之前版本的数据库服务器启动。

  • PAGE SIZE 子句   数据库的页面大小可以是 2048、4096、8192、16384 或 32768 个字节。缺省的页面大小是 4096 个字节。大型数据库通常可从较大的页面大小中获益,但也将负担与较大的页面大小相关的额外开销。

    例如,

    CREATE DATABASE 'c:\\databases\\my_db.db'
    PAGE SIZE 4096;
    页面大小限制

    页面大小不能超出当前服务器所使用的页面大小。服务器页面大小可从启动的第一个数据库集中获取,也可在服务器命令行上使用 -gp 选项来设置。请参见-gp 服务器选项

  • TRANSACTION LOG 子句   事务日志是数据库服务器用来记录对数据库进行的所有更改的文件。在备份和恢复以及数据复制中,事务日志起着重要的作用。

    如果要使用事务日志镜像,可利用 TRANSACTION 子句的 MIRROR 子句提供文件名。事务日志镜像是与事务日志完全相同的一个副本,通常在单独的设备上进行维护,以便更好地保护您的数据。缺省情况下,SQL Anywhere 不使用事务日志镜像。

注释

创建具有所提供名称和属性的数据库文件。此语句在过程、触发器、事件或批处理中不受支持。

权限

执行此语句所需的权限是在服务器命令行上用 -gu 选项来设置的。缺省设置为要求具有 DBA 权限。

运行数据库服务器时所使用的帐户必须对创建文件的目录具有写权限。

副作用

创建操作系统文件。

另请参见
标准和兼容性
  • SQL/2003   服务商扩充。

示例

以下语句在 C:\ 目录中创建名为 mydb.db 的数据库文件。

CREATE DATABASE 'C:\\mydb.db'
TRANSACTION LOG ON
CASE IGNORE
PAGE SIZE 4096
ENCRYPTED OFF
BLANK PADDING OFF;

以下语句使用代码页 1252 创建数据库,并将 UCA 用于 CHAR 和 NCHAR 数据类型。在比较和排序期间考虑重音和大小写。

CREATE DATABASE 'c:\\uca.db'
COLLATION 'UCA'
ENCODING 'CP1252'
NCHAR COLLATION 'UCA'
ACCENT RESPECT
CASE RESPECT;

以下语句创建数据库 myencrypteddb.db,该数据库使用简单加密进行加密:

CREATE DATABASE 'myencrypteddb.db' 
ENCRYPTED ON;

以下语句创建数据库 mystrongencryptdb.db,该数据库使用密钥 gh67AB2 进行加密(高度加密):

CREATE DATABASE 'mystrongencryptdb.db' 
ENCRYPTED ON KEY 'gh67AB2';

以下语句使用简单加密创建数据库 mytableencryptdb.db,且该数据库启用了表加密。请注意,在 ENCRYPTED 之后插入的关键字 TABLE 指示使用表加密而非数据库加密:

CREATE DATABASE 'mytableencryptdb.db' 
ENCRYPTED TABLE ON;

以下语句使用密钥 gh67AB2(高度加密)和 AES_FIPS 加密算法创建数据库 mystrongencrypttabledb.db,且该数据库启用了表加密。

CREATE DATABASE 'mystrongencrypttabledb.db' 
ENCRYPTED TABLE ON KEY 'gh67AB2' 
ALGORITHM 'AES_FIPS';

以下语句创建使用归类 1252LATIN1 的名为 mydb.db 的数据库文件。NCHAR 归类设置为 UCA,locale 设置为 es,并且启用区分大小写和区分重音设置:

CREATE DATABASE 'my2.db' 
      COLLATION '1252LATIN1(case=respect)' 
      NCHAR COLLATION 'UCA(locale=es;case=respect;accent=respect)';