目錄
Name" >Name
Synopsis" >Synopsis
描述" >描述
参数" >参数
注意" >注意
例子" >例子
首頁 資料庫 mysql教程 PostgreSQL修改数据库表的列属性(ALTER语句)

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

Jun 07, 2016 pm 02:50 PM
alter postgresql 修改 屬性 資料庫 語句

一,修改表 PostgreSQL 提供了一族命令用于修改现有表。 可以实现: 增加字段, 删除字段, 增加约束, 删除约束, 修改默认, 重命名字段, 重命名表。 这些操作可以用:ALTER TABLE命令执行的。 1,增加字段 要增加一个字段,使用这条命令: ALTER TABLE p

一,修改表
PostgreSQL 提供了一族命令用于修改现有表。 
可以实现:
增加字段,
删除字段,
增加约束,
删除约束,
修改默认值,
重命名字段,
重命名表。

这些操作可以用:ALTER TABLE命令执行的。

1,增加字段
要增加一个字段,使用这条命令: 
ALTER TABLE products ADD COLUMN description text;
新增的字段对于表中已经存在的行而言最初将先填充空值。 
你也可以同时在该字段上定义约束,使用通常的语法: 
ALTER TABLE products ADD COLUMN description text CHECK (description '');
一个新字段不能用非空约束,因为最初的时候该字段必须包含空值。 但是你可以稍后增加一个非空约束。同样,你也不能在一个新字段 上定义默认值。根据 SQL 标准的说明,这样需要对现存行的新 字段填充默认值,而这个特性还没有实现。但是你可以稍后调整 字段预设。

2,删除字段
除一个字段: 
ALTER TABLE products DROP COLUMN description;

3,增加约束
要增加一个约束,使用表约束语法。比如: 
 代码示例:
ALTER TABLE products ADD CHECK (name '');
ALTER TABLE products ADD CONSTRAINT some_name UNIQUE (product_no);
ALTER TABLE products ADD FOREIGN KEY (product_group_id) REFERENCES product_groups;

要增加一个不能写成表约束的非空约束,使用下面语法: 
ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

这个约束将立即进行检查,所以表在加入约束之前必须符合约束条件。

4,删除约束
要删除一个约束,你需要知道它的名字。如果你给了它一个名字, 那么事情就好办了。
否则系统会分配一个生成的名字,这样你就需要 把它找出来了。psql 的命令 \d tablename 在这儿可以帮忙﹔ 
其它接口可能也提供了检查表的细节的方法。
命令: 
ALTER TABLE products DROP CONSTRAINT some_name;
除了非空约束外,所有约束类型都这么用。要删除非空类型,用 
ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;
(要记得非空约束没有名字。)

5,改变默认值
要给一个字段设定默认值,使用一个象下面这样的命令: 
ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;
要删除默认值,用 
ALTER TABLE products ALTER COLUMN price DROP DEFAULT;
这样相当于把预设设定为空,至少在 PostgreSQL里是这样的。 
如果删除一个还没有定义的默认值不算错误,因为预设隐含就是空值。

6,给字段改名字
重命名一个字段: 
ALTER TABLE products RENAME COLUMN product_no TO product_number;

7,给表改名字
 代码示例:
To rename a table: 
ALTER TABLE products RENAME TO items;


Name

ALTER TABLE -- 修改表的定义

Synopsis

<span style="word-wrap:break-word; padding:0px; margin:0px"><br style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE [ ONLY ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">name</span></tt> [ * ]<br style="word-wrap:break-word; padding:0px; margin:0px">    <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">action</span></tt> [, ... ]<br style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE [ ONLY ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">name</span></tt> [ * ]<br style="word-wrap:break-word; padding:0px; margin:0px">    RENAME [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> TO <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">new_column</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">name</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">    RENAME TO <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">new_name</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">name</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">    SET SCHEMA <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">new_schema</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px"><br style="word-wrap:break-word; padding:0px; margin:0px">这里 <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">action</span></tt> 是下列之一:<br style="word-wrap:break-word; padding:0px; margin:0px"><br style="word-wrap:break-word; padding:0px; margin:0px">    ADD [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">type</span></tt> [ <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column_constraint</span></tt> [ ... ] ]<br style="word-wrap:break-word; padding:0px; margin:0px">    DROP [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> [ RESTRICT | CASCADE ]<br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> TYPE <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">type</span></tt> [ USING <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">expression</span></tt> ]<br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> SET DEFAULT <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">expression</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> DROP DEFAULT<br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> { SET | DROP } NOT NULL<br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> SET STATISTICS <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">integer</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER [ COLUMN ] <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">column</span></tt> SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN }<br style="word-wrap:break-word; padding:0px; margin:0px">    ADD <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">table_constraint</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">    DROP CONSTRAINT <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">constraint_name</span></tt> [ RESTRICT | CASCADE ]<br style="word-wrap:break-word; padding:0px; margin:0px">    DISABLE TRIGGER [ <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">trigger_name</span></tt> | ALL | USER ]<br style="word-wrap:break-word; padding:0px; margin:0px">    ENABLE TRIGGER [ <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">trigger_name</span></tt> | ALL | USER ]<br style="word-wrap:break-word; padding:0px; margin:0px">    CLUSTER ON <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">index_name</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">    SET WITHOUT CLUSTER<br style="word-wrap:break-word; padding:0px; margin:0px">    SET WITHOUT OIDS<br style="word-wrap:break-word; padding:0px; margin:0px">    OWNER TO <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">new_owner</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">    SET TABLESPACE <tt class="REPLACEABLE" style="word-wrap:break-word; padding:0px; margin:0px"><span style="word-wrap:break-word; padding:0px; margin:0px">new_tablespace</span></tt><br style="word-wrap:break-word; padding:0px; margin:0px">  </span>
登入後複製

描述

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 获取更多信息。

ADD table_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

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

SET SCHEMA

这种形式把表移动到另外一个模式。相关的索引,约束,以及 SERIAL 字段的序列都跟着移动。

除了 RENAMESET SCHEMA 之外所有动作都可以捆绑再一个多次修改的列表中同时施用。 比如,我们可以在一个命令里增加几个字段和/或修改几个字段的类型。 对于大表,这么做特别有用,因为只需要对该表做一次处理。

要使用 ALTER TABLE,你必需拥有该表。 要修改一个表的模式,你必须在新的模式上有 CREATE 权限。要修改所有者,你必须还是新的所有角色的直接或者间接的成员, 并且该角色在该表的模式上必须拥有 CREATE 权限。 (这样的限制就保证了修改所有者这个动作和删除、重建该表能做到的动作没有什么区别。 不过,超级用户可以修改任何表的所有者。)

参数

table

试图更改的现存表(可能有模式修饰)的名称。 如果声明了 ONLY,则只更改该表。 如果没有声明 ONLY,则该表及其所有后代表(如果有)都被更新。 我们可以在表名字后面附加一个 * 表示后代表都被扫描,但是在目前的版本里,这是缺省行为。 (在7.1之前的版本,ONLY 是缺省的行为。)缺省可以通过改变配置选项 sql_inheritance 来改变。

column

现存或新的字段名称。

new_column

现存字段的新名称。

new_name

表的新名称。

type

新字段的类型,或者现存字段的新类型。

table_constraint

表的新的约束定义。

constraint_name

要删除的现有约束的名字。

trigger_name

要打开或者关闭的单个触发器的名字。

ALL

打开或者关闭属于该表的所有触发器。 (如果这些触发器中有外键约束,那么就要求超级用户权限。)

USER

打开或者关闭所有属于该表的非外键约束触发器。

index_name

要标记为建簇的表上面的索引名字。

CASCADE

自动删除依赖于被依赖字段或者约束的对象(比如,引用该字段的视图)。

RESTRICT

如果字段或者约束还有任何依赖的对象,则拒绝删除该字段。 这是缺省行为。

new_owner

该表的新所有者的用户名。

new_tablespace

这个表将要移动往的表空间名字。

new_schema

表将移动前往的模式的名字。

注意

COLUMN 关键字是多余的,可以省略。

如果用 ADD COLUMN 增加一个字段,那么所有表中现有行都初始化为该字段的缺省值 (如果没有声明 DEFAULT 子句,那么就是 NULL)。

用一个非空缺省增加一个字段或者是改变一个字段的现有类型会要求整个表的重写。 对于大表来说,这个操作可能会花很长时间;并且它还临时需要两倍的磁盘空间。

增加一个 CHECK 或者 NOT NULL 约束要求扫描该表以保证现有的行复合约束要求。

提供在一个 ALTER TABLE 里面声明多个修改的主要原因是原先需要的对表的多次扫描和重写可以组合成一个回合。

DROP COLUMN 命令并不是物理上把字段删除, 而只是简单地把它标记为 SQL 操作中不可见的。随后对该表的插入和更新将在该字段存储一个 NULL。 因此,删除一个字段是很快的,但是它不会立即缩减你的表在磁盘上的大小,因为被删除了的字段占据的空间还没有回收。 这些空间将随着现有的行的更新而得到回收。

ALTER TYPE 要求重写整个表的特性有时候是一个优点, 因为重写的过程消除了任何表中的没用的空间。比如,要想立刻回收被一个已经删除的字段占据的空间, 最快的方法是

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE table ALTER COLUMN anycol TYPE anytype;</span>
登入後複製

这里 anycol 是任何在表中还存在的字段,而 anytype 是和该字段的原类型一样的类型。 这样的结果是在表上没有任何可见的语意的变化,但是这个命令强迫重写,这样就删除了不再使用的数据。

ALTER TYPEUSING 选项实际上可以声明涉及该行旧值的任何表达式; 也就是说,它可以引用除了正在被转换的字段之外其它的字段。这样,我们就可以用 ALTER TYPE 语法做非常普遍性的转换。因为这个灵活性,USING 表达式并没有施用于该字段的缺省值(如果有的话); 结果可能不是缺省表达式要求的常量表达式。 这就意味着如果从旧类型到新类型如果没有隐含或者赋值转换的话, 那么即使存在 USING 子句的情况下, ALTER TYPE 也可能无法把缺省值转换成新的类型。 在这种情况下,我们应该用 DROP DEFAULT 先删除缺省, 执行 ALTER TYPE,然后使用 SET DEFAULT 增加一个合适的新缺省。 类似的考虑也适用于涉及该字段的索引和约束。

如果表有任何后代表,那么如果不在后代表上做同样的修改的话, 就不允许在父表上增加,重命名或者修改一个字段的类型,也就是说, ALTER TABLE ONLY将被拒绝。这样就保证了后代表总是有和父表匹配的字段。

一个递归DROP COLUMN 操作将只有在后代表并不从任何其它父表中继承该字段并且从来没有独立定义该字段的时候才能删除一个后代表的字段。 一个非递归的DROP COLUMN(也就是,ALTER TABLE ONLY ... DROP COLUMN)从来不会删除任何后代字段, 而是把他们标记为独立定义的,而不是继承的。

TRIGGERCLUSTEROWNER,和 TABLESPACE 行为绝不会递归到后代表; 也就是说,它们的行为就像总是声明了 ONLY 一样。 添加一个约束只能在CHECK 约束上递归。

不允许更改系统表结构的任何部分。

请参考 CREATE TABLE 部分获取更多有效参数的描述。 Chapter 5 里有更多有关继承的信息。

例子

向表中增加一个 varchar 列:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors ADD COLUMN address varchar(30);</span>
登入後複製

从表中删除一个字段:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors DROP COLUMN address RESTRICT;</span>
登入後複製

在一个操作中修改两个现有字段的类型:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors<br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER COLUMN address TYPE varchar(80),<br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER COLUMN name TYPE varchar(100);</span>
登入後複製

使用一个 USING 子句, 把一个包含 UNIX 时间戳的 integer 字段转化成 timestamp with time zone

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE foo<br style="word-wrap:break-word; padding:0px; margin:0px">    ALTER COLUMN foo_timestamp TYPE timestamp with time zone<br style="word-wrap:break-word; padding:0px; margin:0px">    USING<br style="word-wrap:break-word; padding:0px; margin:0px">        timestamp with time zone 'epoch' &#43; foo_timestamp * interval '1 second';</span>
登入後複製

对现存字段改名:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors RENAME COLUMN address TO city;</span>
登入後複製

更改现存表的名字∶

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors RENAME TO suppliers;</span>
登入後複製

给一个字段增加一个非空约束:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors ALTER COLUMN street SET NOT NULL;</span>
登入後複製

从一个字段里删除一个非空约束:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors ALTER COLUMN street DROP NOT NULL;</span>
登入後複製

给一个表增加一个检查约束:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors ADD CONSTRAINT zipchk CHECK (char_length(zipcode) = 5);</span>
登入後複製

删除一个表和它的所有子表的监查约束:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors DROP CONSTRAINT zipchk;</span>
登入後複製

向表中增加一个外键约束:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors ADD CONSTRAINT distfk FOREIGN KEY (address) REFERENCES addresses(address) MATCH FULL;</span>
登入後複製

给表增加一个(多字段)唯一约束:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors ADD CONSTRAINT dist_id_zipcode_key UNIQUE (dist_id, zipcode);</span>
登入後複製

给一个表增加一个自动命名的主键约束,要注意的是一个表只能有一个主键:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors ADD PRIMARY KEY (dist_id);</span>
登入後複製

把表移动到另外一个表空间:

<span style="word-wrap:break-word; padding:0px; margin:0px">ALTER TABLE distributors SET TABLESPACE fasttablespace;</span>
登入後複製

 

把表移动到另外一个模式:

登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

釘釘怎麼修改群組裡的個人名稱_釘釘修改群組個人名稱方法 釘釘怎麼修改群組裡的個人名稱_釘釘修改群組個人名稱方法 Mar 29, 2024 pm 08:41 PM

1.首先打開釘釘。 2.打開群組聊,點選右上角的三個點。 3.找到我在本群的暱稱。 4.點選進入即可修改儲存。

iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 Jul 18, 2024 am 05:48 AM

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

Hibernate 如何實作多型映射? Hibernate 如何實作多型映射? Apr 17, 2024 pm 12:09 PM

Hibernate多態映射可映射繼承類別到資料庫,提供以下映射類型:joined-subclass:為子類別建立單獨表,包含父類別所有欄位。 table-per-class:為子類別建立單獨資料表,僅包含子類別特有列。 union-subclass:類似joined-subclass,但父類別表聯合所有子類別列。

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

如何在PHP中處理資料庫連線錯誤 如何在PHP中處理資料庫連線錯誤 Jun 05, 2024 pm 02:16 PM

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

深入解析HTML如何讀取資料庫 深入解析HTML如何讀取資料庫 Apr 09, 2024 pm 12:36 PM

HTML無法直接讀取資料庫,但可以透過JavaScript和AJAX實作。其步驟包括建立資料庫連線、發送查詢、處理回應和更新頁面。本文提供了利用JavaScript、AJAX和PHP來從MySQL資料庫讀取資料的實戰範例,展示如何在HTML頁面中動態顯示查詢結果。此範例使用XMLHttpRequest建立資料庫連接,發送查詢並處理回應,從而將資料填入頁面元素中,實現了HTML讀取資料庫的功能。

如何用 Golang 連接遠端資料庫? 如何用 Golang 連接遠端資料庫? Jun 01, 2024 pm 08:31 PM

透過Go標準庫database/sql包,可以連接到MySQL、PostgreSQL或SQLite等遠端資料庫:建立包含資料庫連接資訊的連接字串。使用sql.Open()函數開啟資料庫連線。執行SQL查詢和插入操作等資料庫操作。使用defer關閉資料庫連線以釋放資源。

如何在 Golang 中使用資料庫回呼函數? 如何在 Golang 中使用資料庫回呼函數? Jun 03, 2024 pm 02:20 PM

在Golang中使用資料庫回呼函數可以實現:在指定資料庫操作完成後執行自訂程式碼。透過單獨的函數新增自訂行為,無需編寫額外程式碼。回調函數可用於插入、更新、刪除和查詢操作。必須使用sql.Exec、sql.QueryRow或sql.Query函數才能使用回呼函數。

See all articles