Collection Contents 上一页 下一页 PDF

ASA SQL 参考

SQL 语句

CREATE TABLE 语句


说明 

此语句用于在数据库中创建新表,也可以在远程服务器中创建表。

语法 

CREATE [ GLOBAL TEMPORARY ] TABLE [ owner.]table-name
( { column-definition | table-constraint | pctfree }, ... )
[ { IN | ON } dbspace-name ]
ON COMMIT { DELETE | PRESERVE } ROWS
   | NOT TRANSACTIONAL]
AT location-string ]

column-definition :
column-name data-type [ [ NOT ] NULL ]
 [ DEFAULT default-value ] [ column-constraint ... ]

default-value :
 special-value
string
global variable
| [ - ] number
( constant-expression )
built-in-function( constant-expression )
AUTOINCREMENT
CURRENT DATABASE
CURRENT REMOTE USER
CURRENT UTC TIMESTAMP
GLOBAL AUTOINCREMENT [ ( partition-size ) ]
NULL
TIMESTAMP
UTC TIMESTAMP
LAST USER

special-value:
  CURRENT { DATE | TIME | TIMESTAMP
     | UTC TIMESTAMP | USER | PUBLISHER }
USER

column-constraint :
CONSTRAINT constraint-name ] {
     UNIQUE
  | PRIMARY KEY [ CLUSTERED ]
  | REFERENCES table-name
        [ ( column-name ) ] [ actions ] [ CLUSTERED ]
}
| [ CONSTRAINT constraint-name ] CHECK ( condition )
COMPUTE ( expression )

table-constraint :
CONSTRAINT constraint-name ] {
     UNIQUE ( column-name, ... )
   | PRIMARY KEY [ CLUSTERED ] ( column-name, ... )
   | CHECK ( condition )
   | foreign-key-constraint
}

foreign-key-constraint :
NOT NULL ] FOREIGN KEY [ role-name ] [ (column-name, ... ) ]
REFERENCES table-name [ (column-name, ... ) ] [ CLUSTERED ]
actions ] [ CHECK ON COMMIT ]

action :
ON { UPDATE | DELETE }
...{ CASCADE | SET NULL | SET DEFAULT | RESTRICT }

location-string :
  remote-server-name.[db-name].[owner].object-name
remote-server-name;[db-name];[owner];object-name

pctfree : PCTFREE percent-free-space

percent-free-space : integer

参数 

IN 子句    IN 子句指定用来创建表的 dbspace。如果表是 GLOBAL TEMPORARY 表,则忽略 IN 子句。

有关 dbspace 的详细信息,请参见 CREATE DBSPACE 语句

ON COMMIT 子句    ON COMMIT 子句只能用于临时表。缺省情况下,临时表的行将在 COMMIT(提交)时被删除。

NOT TRANSACTIONAL    NOT TRANSACTIONAL 子句只能用于临时表。使用 NOT TRANSACTIONAL 创建的表不受 COMMIT 或 ROLLBACK 中的任何一个的影响。

在某些情况下,NOT TRANSACTIONAL 子句可以提高性能,因为对非事务性临时表执行的操作不会导致在回退日志中生成条目。例如,如果反复调用使用临时表的过程而不会干预 COMMIT 或 ROLLBACK,则可以使用 NOT TRANSACTIONAL。

AT 子句    在 location-string 指定的不同服务器中创建远程表,还在当前数据库中创建映射到此远程表的代理表。AT 子句支持分号 (;) 作为 location-string 中的字段分隔符。如果没有分号,则使用句号作为字段分隔符。这允许在数据库和所有者字段中使用文件名和扩展名。

例如,下面的语句将表 a1 映射到 MS Access 文件 mydbfile.mdb

CREATE TABLE a1
AT 'access;d:\mydbfile.mdb;;a1'

有关远程服务器的信息,请参见 CREATE SERVER 语句。有关代理表的信息,请参见 CREATE EXISTING TABLE 语句指定代理表位置

忽略远程表的外键定义。引用远程表的本地表的外键定义也被忽略。如果远程服务器支持主键,则主键定义发送到此服务器。

忽略远程表的 COMPUTE 子句。

column-definition    定义表中的列。以下是部分列定义。

table-constraint    表约束限制表的一列或多列能够保存的值。

约束    列约束和表约束有助于确保数据库的数据完整性。如果语句会导致违反约束,则该语句的执行不会完成。该语句在检测到错误前所做的任何更改都被撤消并报告错误。列约束是相应表约束的简化。

CREATE TABLE Product (
   product_num INTEGER UNIQUE
)
CREATE TABLE Product (
   product_num INTEGER,
   UNIQUE ( product_num )
)

正常情况下使用列约束,除非约束引用表中的多列。这些情况下,必须使用表约束。

约束包括以下这些:

PCTFREE    指定希望为每个表页保留的可用空间的百分比。如果数据更新时行大小增加,将占用可用空间。如果表页中没有可用空间,则该页上的行大小每次增加时,行都需要在多个表页中拆分,从而导致行碎片并可能引起性能下降。

percent-free-space 是一个介于 0 和 100 之间的整数。前者指定每页上不保留剩余的可用空间:每页均完全填满。高值会将每行单独插入到页中。如果未设置 PCTFREE,则每页保留 200 字节。

PCTFREE 的值存储在 SYSATTRIBUTE 系统表中。

有关详细信息,请参见 SYSATTRIBUTE 系统表

用法 

CREATE TABLE 语句创建新表。通过指定所有者名称,可为其他用户创建表。如果指定 GLOBAL TEMPORARY,则表为临时表。否则,表为基表。

与基表的定义一样,临时表的定义也存在于数据库中并一直保留在数据库中,直到被 DROP TABLE 语句显式删除。临时表中的行仅对插入行的连接是可见的。来自相同或不同应用程序的多个连接可同时使用同一临时表,而每个连接只能看到自己的行。连接结束时删除用于连接的临时表中的行。

权限 

必须有 RESOURCE 权限。

必须有 DBA 权限才能为其他用户创建表。

Windows CE 不支持用于创建代理表的 AT 子句。

副作用 

自动提交。

另请参见 
标准和兼容性 
示例 

下面的示例为图书馆数据库创建用于保存图书信息的表。

CREATE TABLE library_books (
-- NOT NULL is assumed for primary key columns
isbn CHAR(20)      PRIMARY KEY,
copyright_date     DATE,
title              CHAR(100),
author             CHAR(50),
-- column(s) corresponding to primary key of room
-- are created automatically
FOREIGN KEY location REFERENCES room
)

下面的示例为图书馆数据库创建用于保存借出图书信息的表。date_borrowed 的缺省值指示在创建条目的当天借出图书。date_returned 列在归还图书前一直为 NULL。

CREATE TABLE borrowed_book (
date_borrowed DATE NOT NULL DEFAULT CURRENT DATE,
date_returned       DATE,
book                CHAR(20)
                    REFERENCES library_books (isbn),
-- The check condition is UNKNOWN until
-- the book is returned, which is allowed
CHECK( date_returned >= date_borrowed )
)

下面的示例在销售数据库中创建保存订单和订单项信息的表。

CREATE TABLE Orders (
   order_num INTEGER NOT NULL PRIMARY KEY,
   date_ordered DATE,
   name CHAR(80)
);
CREATE TABLE Order_item (
   order_num        INTEGER NOT NULL,
   item_num         SMALLINT NOT NULL,
   PRIMARY KEY (order_num, item_num),
   -- When an order is deleted, delete all of its
   -- items.
   FOREIGN KEY (order_num)
   REFERENCES Orders (order_num)
   ON DELETE CASCADE
)

下面的示例在远程服务器 SERVER_A 上创建名为 t1 的表,并创建映射到此远程表的名为 t1 的代理表。

CREATE TABLE t1
( a  INT,
  b  CHAR(10))
AT 'SERVER_A.db1.joe.t1'

Collection Contents 上一页 下一页 PDF