SQL修改数据库表的列属性

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQL修改数据库表的列属性(ALTER语句)

我们可以用客户端的语句改写,psql比如把数据库表journal里的keyword,ekeyword属性改为character(350),原来为character(200),那么我们可以这样操作:

psql postgres -c "ALTER TABLE journal ALTER keyword TYPE character(350)"

psql postgres -c "ALTER TABLE journal ALTER ekeyword TYPE character(350)"

好了,修改结束。

附ALTER语句的文档。

----------------------

ALTER TABLE [ ONLY ]name[ * ]

action[, ... ]

ALTER TABLE [ ONLY ]name[ * ]

RENAME [ COLUMN ]column TO new_column

ALTER TABLE name

RENAME TO new_name

ALTER TABLE name

SET SCHEMA new_schema

这里action是下列之一:

ADD [ COLUMN ]columntype[column_constraint[ ... ] ]

DROP [ COLUMN ]column[ RESTRICT | CASCADE ]

ALTER [ COLUMN ]column TYPE type[ USING expression]

ALTER [ COLUMN ]column SET DEFAULT expression

ALTER [ COLUMN ]column DROP DEFAULT

ALTER [ COLUMN ]column{ SET | DROP } NOT NULL

ALTER [ COLUMN ]column SET STATISTICS integer

ALTER [ COLUMN ]column SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }

ADD table_constraint

DROP CONSTRAINT constraint_name[ RESTRICT | CASCADE ]

DISABLE TRIGGER [trigger_name| ALL | USER ]

ENABLE TRIGGER [trigger_name| ALL | USER ]

CLUSTER ON index_name

SET WITHOUT CLUSTER

SET WITHOUT OIDS

OWNER TO new_owner

SET TABLESPACE new_tablespace描述

ALTER TABLE变更一个现存表的定义。它有好几种子形式:

ADD COLUMN

这种形式用和CREATE TABLE里一样的语法向表中增加一个新的字段。

DROP COLUMN

这种形式从表中删除一个字段。请注意,和这个字段相关的索引和表约束也会被自动删除。如果任何表之外的对象依赖于这个字段,你必须说CASCADE,比如,外键参考,视图等等。

ALTER COLUMN TYPE

这种类型改变表中一个字段的类型。该字段涉及的索引和简单的表约束将被自动地转换为使用新的字段类型,方法是重新分

析最初提供的表达式。可选的USING子句声明如何从旧的字段值里计算新的字段值;如果省略,那么缺省的转换就是从旧类型像新类型的赋值转换。如果从旧数据类型到新类型没有隐含或者赋值的转换,那么必须提供一个USING。

SET/DROP DEFAULT

这种形式为一个字段设置或者删除缺省值。请注意缺省值只应用于随后的INSERT命令;它们不会导致已经在表中的行的数值的修改。我们也可以为视图创建缺省,这个时候它们是在视图的ON INSERT规则应用之前插入INSERT语句中去的。SET/DROP NOT NULL

这些形式修改一个字段是否标记为允许NULL 值或者是拒绝NULL 值。如果表在字段中包含非空值,那么你只可以SET NOT NULL。

SET STATISTICS

这个形式为随后的ANALYZE操作设置每字段的统计收集目标(default_statistics_target)。目标的范围可以在0 到1000 之内设置;另外,把他设置为-1 则表示重新恢复到使用系统缺省的统计目标。有关PostgreSQL查询规划器使用的统计信息的更多信息,请参考Section 13.2。

SET STORAGE

这种形式为一个字段设置存储模式。这个设置控制这个字段是内联保存还是保存在一个附属的表里,以及数据是否要压缩。

PLAIN必需用于定长的数值,比如integer,并且是内联的,不压缩的。MAIN用于内联,可压缩的数据。EXTERNAL用于外部保存,不压缩的数据,而EXTENDED用于外部的压缩数据。EXTENDED是大多数支持非PLAIN存储的数据之缺省。

使用EXTERNAL将令在text字段上的子字串操作更快,付出的代价是增加了存储空间。请注意SET STORAGE本身并不改变表上的任何东西,只是设置将来的表操作时,建议使用的策略。参阅Section 50.2获取更多信息。

ADDtable_constraint

这个形式给表增加一个新的约束,用的语法和CREATE TABLE一样。

DROP CONSTRAINT

这个形式删除一个表上的约束。目前,在表上的约束不要求有唯一的名字,因此可能有多个约束匹配声明的名字。所有这样的约束都将被删除。

DISABLE/ENABLE TRIGGER

这个形式关闭或者打开属于该表的触发器。一个被关闭掉的触发器是系统仍然知道的,但是在触发器事件发生的时候不会被执行。对于一个推迟了的触发器,在事件发生的时候会检查打开状态,而不是在函数实际执行的时候。我们可以通过申明名字的方法打开或者关闭任意一个触发器,或者是该表上的所有触发器,或者只是用户触发器(这个选项排除了那些用于实现外键约束的触发器)。打开或者关闭约束触发器要求超级用户权限;这么做的时候应该小心,因为如果触发器不执行的话,约束保证的数据完整性也就没有办法确保了。

CLUSTER

这种形式为将来的CLUSTER选项选择缺省索引。它实际上并不重新对表建簇。

SET WITHOUT CLUSTER

这种形式从表中删除最新使用的CLUSTER索引。这样会影响将来那些没有声明索引的建簇操作。

SET WITHOUT OIDS

这种形式从表中删除oid系统字段。它和DROP COLUMN oid RESTRICT完全相同,只不过是如果表上已经没有oid 字段了,那么它不会报告错误。

请注意,不存在某种ALTER TABLE的变种可以在删除了OID 之后再把它们恢复回来。

RENAME

RENAME形式改变一个表的名字(或者是一个索引,一个序列,或者一个视图)或者是表中一个独立字段的名字。它对存储

的数据没有任何影响。

OWNER

这个形式改变表,序列或者视图的所有者为指定所有者。

SET TABLESPACE

这种形式把表的表空间修改为指定的表空间并且把与表相关的数据文件移动到新的表空间去。如果在表上呦索引,则不会移动。但是他们可以通过额外的SET TABLESPACE命令移动。参阅CREATE TABLESPACE。

RENAME

相关文档
最新文档