Man page - create_trigger(7)
Manual
CREATE TRIGGER
NAMESYNOPSIS
DESCRIPTION 描 述
PARAMETERS 参 数
NOTES 注 意
EXAMPLES 例 子
COMPATIBILITY 兼 容 性
SEE ALSO 参 见
译 者
跋
NAME
CREATE TRIGGER - 定 义 一 个 新 的 触 发 器
SYNOPSIS
CREATE TRIGGER
name
{ BEFORE | AFTER } {
event
[ OR ... ] }
ON
table
[ FOR [ EACH ] { ROW | STATEMENT } ]
EXECUTE PROCEDURE
funcname
(
arguments
)
DESCRIPTION 描 述
CREATE TRIGGER 创 建 一 个 新 的 触 发 器 。 触 发 器 将 与 指 定 表 关 联 并 且 将 在 特 定 事 件 发 生 时 执 行 声 明 的 函 数 func。
触 发 器 可 以 声 明 为 在 对 记 录 进 行 操 作 之 前 ( 在 检 查 约 束 之 前 和 INSERT, UPDATE 或 DELETE 执 行 前 ) 或 操 作 完 成 之 后 ( 在 检 查 约 束 之 后 和 完 成 INSERT, UPDATE 或 DELETE 操 作 ) 触 发 。 如 果 触 发 器 在 事 件 之 前 , 触 发 器 可 能 略 过 当 前 记 录 的 操 作 或 改 变 被 插 入 的 ( 当 前 ) 记 录 ( 只 对 INSERT 和 UPDATE 操 作 有 效 ) 。 如 果 触 发 器 在 事 件 之 后 , 所 有 更 改 , 包 括 最 后 的 插 入 , 更 新 或 删 除 对 触 发 器 都 是 "可 见 "的 。
一 个 FOR EACH ROW 执 行 指 定 操 作 的 触 发 器 为 操 作 修 改 的 每 一 行 都 调 用 一 次 。 比 如 , 一 个 影 响 10 行 的 DELETE 将 导 致 任 何 在 目 标 关 系 上 的 ON DELETE 触 发 器 独 立 调 用 10 次 , 每 个 被 删 除 的 行 一 次 。 相 比 之 下 , 一 个 为 指 定 操 作 FOR EACH STATEMENT 的 触 发 器 只 是 为 任 何 操 作 执 行 一 次 , 不 管 有 多 少 行 被 修 改 。 ( 特 别 是 , 一 个 修 改 零 行 的 操 作 仍 然 会 导 致 任 何 合 适 的 FOR EACH STATEMENT 触 发 器 的 执 行 。 )
如 果 多 个 同 类 型 的 触 发 器 为 同 样 事 件 做 了 定 义 , 那 么 它 们 将 按 照 字 母 顺 序 被 激 活 。
SELECT 并 不 更 改 任 何 行 , 因 此 你 不 能 创 建 SELECT 触 发 器 。 这 种 场 合 下 规 则 和 视 图 更 合 适 些 。
请 参 考 Part V ‘‘Triggers’’ 获 取 更 多 信 息 。
PARAMETERS 参 数
|
name |
赋 予 新 触 发 器 的 名 称 。 它 必 需 和 任 何 作 用 于 同 一 表 的 触 发 器 不 同 。
|
BEFORE |
||
|
AFTER |
决 定 该 函 数 是 在 事 件 之 前 还 是 之 后 调 用 。
|
event |
INSERT, DELETE 或 UPDATE 其 中 之 一 。 它 声 明 击 发 触 发 器 的 事 件 。 多 个 事 件 可 以 用 OR 声 明 。 |
|||
|
table |
触 发 器 作 用 的 表 名 称 ( 可 以 用 模 式 修 饰 ) 。 |
FOR EACH ROW
FOR EACH STATEMENT
这 些 选 项 声 明 触 发 器 过 程 是 否 为 触 发 器 事 件 影 响 的 每 个 行 触 发 一 次 , 还 是 只 为 每 条 SQL 语 句 触 发 一 次 。 如 果 都 没 有 声 明 , FOR EACH STATEMENT 是 缺 省 。
|
func |
一 个 用 户 提 供 的 函 数 , 它 声 明 为 不 接 受 参 数 并 且 返 回 trigger 类 型 。 |
arguments
一 个 可 选 的 用 逗 号 分 隔 的 参 数 列 表 , 它 将 在 触 发 器 执 行 的 时 候 提 供 给 函 数 , 这 些 参 数 是 文 本 字 串 常 量 。 也 可 以 在 这 里 写 简 单 的 名 字 和 数 值 常 量 , 但 是 它 们 会 被 转 换 成 字 串 。 请 检 查 实 现 语 言 中 关 于 如 何 在 触 发 器 函 数 中 访 问 触 发 器 参 数 的 描 述 ; 这 些 参 数 可 能 和 普 通 的 函 数 参 数 不 同 。
NOTES 注 意
要 在 一 个 表 上 创 建 一 个 触 发 器 , 用 户 必 需 在 该 表 上 有 TRIGGER 权 限 。
在 PostgreSQL 版 本 7.3 以 前 , 我 们 必 须 把 触 发 器 函 数 声 明 为 返 回 占 位 类 型 opaque, 而 不 是 trigger。 为 了 支 持 装 载 老 的 转 储 文 件 , CREATE TRIGGER 将 接 受 一 个 声 明 为 返 回 opaque 的 函 数 , 但 是 它 将 发 出 一 条 NOTICE 并 且 把 函 数 声 明 的 返 回 类 型 改 成 trigger。
用 DROP TRIGGER [ drop_trigger (7)] 获 取 如 何 删 除 触 发 器 的 信 息 。
EXAMPLES 例 子
Section 33.4 ‘‘Triggers’’ 包 含 一 个 完 整 的 例 子 。
COMPATIBILITY 兼 容 性
CREATE TRIGGER 里 的 CREATE TRIGGER 语 句 实 现 了 一 个 SQL99 标 准 的 子 集 。 ( SQL92 里 没 有 触 发 器 ) 目 前 仍 然 缺 少 下 面 的 功 能 ∶
|
• |
SQL99 允 许 触 发 器 为 指 定 的 字 段 的 更 新 进 行 触 发 ( 也 就 是 说 , AFTER UPDATE OF col1, col2) 。 |
||
|
• |
SQL99 允 许 你 为 "old" 和 "new" 行 或 者 表 定 义 别 名 , 用 于 定 义 触 发 器 的 动 作 ( 也 就 是 说 , CREATE TRIGGER ... ON tablename REFERENCING OLD ROW AS somename NEW ROW AS othername ...)。 因 为 PostgreSQL 允 许 触 发 器 过 程 以 任 意 数 量 的 用 户 定 义 语 言 进 行 书 写 , 所 以 访 问 数 据 的 工 作 是 用 和 语 言 相 关 的 方 法 实 现 的 。 |
||
|
• |
PostgreSQL 只 允 许 为 触 发 的 动 作 执 行 存 储 的 过 程 。 SQL99 允 许 执 行 一 些 其 他 的 SQL 命 令 , 比 如 那 CREATE TABLE 作 为 触 发 器 动 作 。 这 个 限 止 并 不 难 绕 开 , 只 要 创 建 一 个 执 行 这 些 命 令 的 存 储 过 程 即 可 。 |
SQL99 要 求 多 个 触 发 器 应 该 以 创 建 的 时 间 顺 序 执 行 。 PostgreSQL 采 用 的 是 按 照 名 字 顺 序 , 我 们 认 为 这 样 更 加 方 便 。
用 OR 给 一 个 触 发 器 声 明 多 个 动 作 是 PostgreSQL 对 标 准 的 扩 展 。
SEE ALSO 参 见
CREATE FUNCTION [ create_function (7)], ALTER TRIGGER [ alter_trigger (l)], DROP TRIGGER [ drop_trigger (l)]
译 者
Postgresql 中 文 网 站 何 伟 平 <laser@pgsqldb.org>
跋
本
页 面 中 文 版 由
中 文 man 手 册 页 计
划 提 供 。
中 文 man 手 册 页 计
划 :
https://github.com/man-pages-zh/manpages-zh