当前位置:网站首页>PG basics -- Logical Structure Management (trigger)
PG basics -- Logical Structure Management (trigger)
2022-07-01 12:53:00 【51CTO】
Create trigger
1) First, create an execution function for the trigger , The return type of this function is trigger type
2) Build a trigger
postgres
=#
create function student_delete_trigger
(
)
postgres
-# returns trigger
as $$
postgres$#
begin
postgres$#
delete
from score
where student_no
=OLD
.student_no
;
postgres$# return OLD
;
postgres$# end
;
postgres$# $$
postgres
-# language plpgsql
;
CREATE FUNCTION
postgres
=#
postgres
=#
create trigger delete_student_trigger
postgres
-# after
delete
on student
postgres
-# for each row execute procedure student_delete_trigger
(
)
;
CREATE TRIGGER
postgres
=#
insert
into student
values
(
1
,
' Zhang San '
,
14
)
;
insert
into student
values
(
2
,
' Li Si '
,
14
)
;
INSERT
0
1
postgres
=#
insert
into student
values
(
2
,
' Li Si '
,
14
)
;
INSERT
0
1
postgres
=#
insert
into student
values
(
3
,
' The king 2 '
,
14
)
;
INSERT
0
1
postgres
=#
postgres
=#
insert
into score
values
(
1
,
85
,
75
,
date '2022-06-29'
)
;
INSERT
0
1
postgres
=#
insert
into score
values
(
1
,
80
,
73
,
date '2022-01-29'
)
;
INSERT
0
1
postgres
=#
insert
into score
values
(
2
,
87
,
75
,
date '2022-03-29'
)
;
INSERT
0
1
postgres
=#
insert
into score
values
(
3
,
75
,
75
,
date '2022-06-29'
)
;
INSERT
0
1
postgres
=#
insert
into score
values
(
3
,
55
,
75
,
date '2022-04-29'
)
;
INSERT
0
1
postgres
=#
delete
from student
where student_no
=
3
;
DELETE
1
postgres
=#
select
*
from score
;
student_no
| chinese_score
| math_score
| test_date
------------+---------------+------------+------------
1
|
85
|
75
|
2022
-
06
-
29
1
|
80
|
73
|
2022
-
01
-
29
2
|
87
|
75
|
2022
-
03
-
29
(
3 rows
)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
Statement level triggers
Statement level triggers refer to the execution of each sql Statement is executed only once .
create
table log_student
(
update_time
timestamp
,
db_user
varchar
(
40
)
,
opr_type
varchar
(
6
)
)
create
or replace function log_student_trigger
(
)
returns trigger
as $$
begin
insert
into log_student
values
(now
(
)
,user
,TG_OP
)
;
return
null
;
end
;
$$
language
"plpgsql"
;
TG_OP Is a special variable in the trigger function , representative DML Operation type
create trigger log_student_trigger
after
insert
or
delete
or
update
on student
for statement execute procedure log_student_trigger
(
)
;
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
Although deleted 2 Bar record , But the execution is a statement , So in log_student Only one operation is recorded in .
Line level triggers
Row level triggers execute each row SQL Statements are executed once
create trigger log_student_trigger2
after
insert
or
delete
or
update
on student
for ROW EXECUTE PROCEDURE log_student_trigger
(
)
;
postgres
=#
insert
into student
values
(
1
,
' Zhang San '
,
14
)
,
(
2
,
' Li Si '
,
30
)
;
INSERT
0
2
postgres
=#
select
*
from log_student
;
update_time
| db_user
| opr_type
----------------------------+----------+----------
2022
-
06
-
30
10
:
42
:
58.834223
| postgres
|
INSERT
2022
-
06
-
30
10
:
42
:
58.834223
| postgres
|
INSERT
(
2 rows
)
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
You can see a line sql Execution insert 2 Row data , The log table records 2 Bar record
BEFORE trigger
Statement level BEFOR Triggers are triggered before the statement starts doing anything
Line level BEFORE Triggers are triggered before the operation on a specific row .
AFTER trigger
Statement level AFTER Triggers are triggered at the end of the statement
Line level AFTER Triggers are triggered at the end of the statement , It will be at any statement level AFTER Trigger before trigger .
Delete trigger
if exists If the trigger does not exist , Send out a notice Not a mistake
cascade Cascade delete objects that depend on this trigger
restrict If there are dependent objects, they refuse to delete
Be careful : When you delete a trigger , The function of the trigger will not be deleted , however , When deleting a table , The trigger on the table will be deleted .
Trigger function has return value , Statement level triggers should always return NULL, That is, the required display is written in the trigger function return null, Otherwise, the report will be wrong .
边栏推荐
- System test UI test summary and questions (interview)
- Vs code set code auto save
- GID: open vision proposes a comprehensive detection model knowledge distillation | CVPR 2021
- Powerful, easy-to-use, professional editor / notebook software suitable for programmers / software developers, comprehensive evaluation and comprehensive recommendation
- Fundamentals of number theory and its code implementation
- Interpretation of hard threshold function [easy to understand]
- [20220605] Literature Translation -- visualization in virtual reality: a systematic review
- 手机便签应用
- There are risks in trading
- 路由基础之OSPF LSA详细讲解
猜你喜欢

VS Code 设置代码自动保存

Feign & Eureka & Zuul & Hystrix 流程

Look at the sky at dawn and the clouds at dusk, and enjoy the beautiful pictures

nexus搭建npm依赖私库

香港科技大学李泽湘教授:我错了,为什么工程意识比上最好的大学都重要?

VM virtual machine configuration dynamic IP and static IP access

VS Code 设置单击打开新文件窗口,不覆盖前一个窗口

游戏公会在去中心化游戏中的未来

Based on the open source stream batch integrated data synchronization engine Chunjun data restore DDL parsing module actual combat sharing

Fiori 应用通过 Adaptation Project 的增强方式分享
随机推荐
软件测试中功能测试流程
Interpretation of hard threshold function [easy to understand]
R language builds a binary classification model based on H2O package: using H2O GBM build gradient hoist model GBM, use H2O AUC value of AUC calculation model
6.30 simulation summary
【开发大杀器】之Idea
Look at the sky at dawn and the clouds at dusk, and enjoy the beautiful pictures
Tencent Li Wei: deeply cultivate "regulatory technology" to escort the steady and long-term development of the digital economy
leetcode:329. 矩阵中的最长递增路径【dfs + cache + 无需回溯 + 优雅】
题目 1004: 母牛的故事(递推)
PG基础篇--逻辑结构管理(触发器)
Like the three foot platform
从数据库中更新一条数据,用cdc会同时获得op字段分别为d和c的两条数据吗?我记得之前是只有op为u
Mysql间隙锁
Fundamentals of number theory and its code implementation
【脑洞大开】《西潮》及《走向世界丛书》
Will it affect the original MySQL database to read the data of a MySQL table in full by flick MySQL CDC
mysql统计账单信息(下):数据导入及查询
木架的场景功能
Wechat applet - 80 practical examples of wechat applet projects
Manage nodejs with NVM (downgrade the high version to the low version)