当前位置:网站首页>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 .
边栏推荐
- VS Code 设置代码自动保存
- leetcode:329. 矩阵中的最长递增路径【dfs + cache + 无需回溯 + 优雅】
- localtime居然不可重入,踩坑了
- Blocking sockets的读写操作该怎么玩?
- I spent tens of thousands of dollars to learn and bring goods: I earned 3 yuan in three days, and the transaction depends on the bill
- 基于开源流批一体数据同步引擎 ChunJun 数据还原 —DDL 解析模块的实战分享
- 简单斐波那契(递推)
- 数据库之MHA高可用集群部署及故障切换
- 请问flink mysql cdc 全量读取mysql某个表数据,对原始的mysql数据库有影响吗
- 题目 1004: 母牛的故事(递推)
猜你喜欢

Project deployment is not difficult at all!

硬件开发笔记(九): 硬件开发基本流程,制作一个USB转RS232的模块(八):创建asm1117-3.3V封装库并关联原理图元器件

Function test process in software testing

VM virtual machine configuration dynamic IP and static IP access

"Analysis of 43 cases of MATLAB neural network": Chapter 40 research on prediction of dynamic neural network time series -- implementation of NARX based on MATLAB

【大型电商项目开发】性能压测-压力测试基本概念&JMeter-38

我花上万学带货:3天赚3元,成交靠刷单
![[today in history] July 1: the father of time sharing system was born; Alipay launched barcode payment; The first TV advertisement in the world](/img/41/76687ea13e1722654b235f2cfa66ce.png)
[today in history] July 1: the father of time sharing system was born; Alipay launched barcode payment; The first TV advertisement in the world

ROS2 Foxy depthai_ros教程

CS5268优势替代AG9321MCQ Typec多合一扩展坞方案
随机推荐
mysql统计账单信息(下):数据导入及查询
redis探索之缓存击穿、缓存雪崩、缓存穿透
Idea of [developing killer]
Wechat applet - 80 practical examples of wechat applet projects
79. Word search [DFS + backtracking visit + traversal starting point]
Nc100 converts strings to integers (ATOI)
[encounter Django] - (II) database configuration
有没有大佬 遇到过flink监控postgresql数据库, 检查点无法使用的问题
Like the three foot platform
logstash报错:Cannot reload pipeline, because the existing pipeline is not reloadable
木架的场景功能
6.30 simulation summary
Logstash error: cannot reload pipeline, because the existing pipeline is not reloadable
GID: open vision proposes a comprehensive detection model knowledge distillation | CVPR 2021
Function test process in software testing
Function test process in software testing
Operator-1初识Operator
SQLAlchemy在删除有外键约束的记录时,外键约束未起作用,何解?
华为面试题: 招聘
数字信号处理——线性相位型(Ⅱ、Ⅳ型)FIR滤波器设计(2)