Collection Contents 上一页 下一页 PDF

ASA SQL 参考

SQL 语句

ALTER TABLE 语句


说明 

此语句用于修改表定义或使表能够参与 Replication Server 复制。

语法 1 

ALTER TABLE [ owner.]table-name
add-clause | modify-clause | drop-clause | rename-clause }

add-clause :
   ADD { column-definition | table-constraint }
| { ADD PCTFREE integer | PCTFREE DEFAULT }

modify-clause :
  MODIFY column-definition
MODIFY column-name { DEFAULT default-value
   | [ NOT ] NULL
   | [ CONSTRAINT constraint-name ]
         CHECK { NULL |  ( new-condition ) } }
ALTER column-name  column-modification
ALTER constraint-name CHECK ( new-condition )

drop-clause :
DELETE | DROP }{
    column-name
   | CONSTRAINT constraint-name
   | CHECK
   | UNIQUE ( column-name, ... )
   | PRIMARY KEY
   | FOREIGN KEY role-name }

rename-clause :
  RENAME  new-table-name
RENAME column-name TO new-column-name
RENAME constraint-name TO new-constraint-name

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

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

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

column-modification :
  SET DEFAULT default-value
DROP DEFAULT
ADD [ CONSTRAINT column-constraint-name ] CHECK ( condition )
| { DELETE | DROP } CONSTRAINT column-constraint-name
| { DELETE | DROP } CHECK
SET COMPUTE ( expression )
DROP COMPUTE

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

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

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

actions :
ON UPDATE action ] [ ON DELETE action ]

action :
CASCADE | SET NULL | SET DEFAULT | RESTRICT

语法 2 

ALTER TABLE [ owner.]table-name REPLICATE { ON | OFF }

参数 

add-clause    向表中添加新列或表约束。有关详细信息,请参见后面的内容。

modify-clause    更改单个列的定义。有关详细信息,请参见后面的内容。

drop-clause    删除列或表约束。有关详细信息,请参见后面的内容。

rename-clause    更改表、列或约束的名称。有关详细信息,请参见后面的内容。

ADD column-definition    向表中添加新列。

如果列有缺省值,新列的所有行将用该缺省值来填充。

Adaptive Server Anywhere 优化可以包含 NULL 的列的创建过程。可以包含 NULL 的第一列分配供八个这样的列使用的空间,然后将这八列全部初始化为 NULL。(这不需要额外的存储空间。)因此,后面添加的七列不需要对表行进行更改。然后,添加第九列时,为另外八个这样的列分配空间,并修改表的每一行以分配额外的空间。

ADD table-constraint    为表添加约束。有关表约束的完整说明,请参见 CREATE TABLE 语句

如果指定 PRIMARY KEY,表一定不能已具有 CREATE TABLE 语句或另一 ALTER TABLE 语句创建的主键。

可选约束名用于以后单独修改或删除约束,而不必修改整个表的约束。

只有在返回的值为 FALSE 时,表 CHECK 约束才会失败。如果返回的值为 UNKNOWN 则可以进行更改。

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

如果可用空间百分比为 0,则指定每页不保留可用空间—每页都会完全填充。如果可用空间百分比较高,则每行都单独插入到页中。如果未设置 PCTFREE,或者如果指定 DEFAULT,则每页保留 200 字节。

如果设置了 PCTFREE,所有表页的后续插入都使用新值,但是已插入的行不受影响。值一直保持到它被更改或表被删除。

PCTFREE 说明可用于基表、全局临时表或局部临时表。除局部临时表外,PCTFREE 值存储在 SYSATTRIBUTE 系统表中。

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

MODIFY column-definition    更改表中现有列的长度或数据类型。如果指定了 NOT NULL,则 NOT NULL 约束将添加到指定的列。否则,不更改列的 NOT NULL 约束。如果有必要,修改列中的数据将转换为新的数据类型。如果发生转换错误,操作将失败,而表保留不变。

不能使用 MODIFY 子句将一个列修改为计算列。只能使用 ADD、DELETE/DROP 或 ALTER 子句添加、删除或变更计算列。

删除索引、约束或键 
如果列包含在唯一性约束、外键或主键中,则必须删除约束或键后才能修改列。如果删除主键,引用表的所有外键也将被删除。

不能通过 MODIFY 修改表约束或列约束。要更改约束,必须通过 DELETE 删除旧约束并通过 ADD 添加新约束。

MODIFY column-name DEFAULT default-value    更改表中现有列的缺省值。要删除列的缺省值,请指定 DEFAULT NULL。修改缺省值不会更改表中的任何现有值。

ALTER column-name column-modification    更改列的定义。允许进行以下修改:

MODIFY column-name [ NOT ] NULL    更改列的 NOT NULL 约束,以在列中允许或禁止使用 NULL 值。

MODIFY column-name CHECK NULL    删除列的检查约束。此语句不能用于用 5.0 版之前的版本创建的数据库。

MODIFY column-name CHECK (condition)    用指定的 CHECK 条件替换列的现有 CHECK 条件。此语句不能用于用 5.0 版之前的版本创建的数据库。

DELETE column-name    从表中删除列。如果列包含在任何索引、唯一性约束、外键或主键中,则必须删除索引、约束或键后才能删除列。这不会删除引用列的 CHECK 约束。

DELETE constraint-name    从表的定义中删除命名约束。

DELETE CHECK    删除表的所有检查约束。这包括表检查约束和列检查约束。

DELETE UNIQUE (column-name, ...)    删除该表的唯一性约束。还删除引用该唯一性约束的任何外键(而不是主键)。

DELETE PRIMARY KEY    删除该表的主键约束。还删除引用该表的主键的所有外键。

DELETE FOREIGN KEY role-name    删除该表的具有给定角色名称的外键约束。

RENAME new-table-name    将表名更改为 new-table-name。注意必须修改任何使用旧表名的应用程序。被自动分配旧表名的外键的名称不更改。

RENAME column-name TO new-column-name    将列名更改为 new-column-name。注意需要修改任何使用旧列名的应用程序。

用法 

语法 1    ALTER TABLE 语句更改以前创建的表中的表属性(列定义、约束)。注意语法允许使用变更子句列表,但是在一个 ALTER TABLE 语句中,只能添加、修改或删除一个表约束或列约束。在同一语句中不能同时添加和修改表。

对于局部临时表不能使用 ALTER TABLE。

只要语句影响了当前正由其它连接使用的表,都会禁止 ALTER TABLE。ALTER TABLE 可能很耗时,当正在处理语句时,服务器不会处理引用表的请求。

有关使用 CLUSTERED 选项的详细信息,请参见使用聚簇索引

5.0 版之前,所有的表约束和列约束都保存在单个表约束中。因此,对于这些数据库,各列约束不能用 MODIFY column-name CHECK NULL 子句删除,也不能用 MODIFY column-name CHECK (condition ) 子句替换。要使用这些语句,应该删除整个表约束,并使用 MODIFY column-name CHECK (condition ) 子句添加回约束。这时可以使用 MODIFY CHECK。

语法 2    当表有 REPLICATE ON 时,表的所有更改都发送到 Replication Server 进行复制。Replication Server 中的复制定义用于决定将哪些表更改发送到其它站点。本节的其余部分描述语法 1。

权限 

必须是以下之一:

除非已引用临时表的所有用户都断开了连接,否则无法变更全局临时表。

副作用 

自动提交。

MODIFY 和 DELETE (DROP) 选项关闭当前连接的所有游标。

ALTER TABLE 操作开始时执行检查点。

一旦变更了列或表,引用变更列的任何存储过程、视图或其它项不再有效。

如果您更改一个列的声明长度,则该列的统计信息会被删除。

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

下面的示例在 employee 表中添加一个新列,以显示雇员的办公地点。

ALTER TABLE employee
ADD office CHAR(20) DEFAULT 'Boston'

下面的示例从 employee 表中删除办公室列。

ALTER TABLE employee
DELETE office

客户表中的地址列目前可以保存最多 35 个字符。要使它可以保存最多 50 个字符,输入下面的命令。

ALTER TABLE customer
MODIFY address CHAR(50)

下面的示例在客户表中添加一列,它为每个客户指定一个销售联系人。

ALTER TABLE customer
ADD sales_contact INTEGER
REFERENCES employee (emp_id)
ON UPDATE CASCADE
ON DELETE SET NULL

此外键通过级联更新构造并在删除时设置为空。如果雇员更改他们的雇员 ID,列将更新以反映这一更改。如果雇员离开公司并且删除了他们的雇员 ID,则列设置为 NULL。


Collection Contents 上一页 下一页 PDF