当前位置:网站首页>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 .
边栏推荐
- Application of stack -- bracket matching problem
- Localtime can't re-enter. It's a pit
- Accept different views with an open mind
- Tencent Li Wei: deeply cultivate "regulatory technology" to escort the steady and long-term development of the digital economy
- 【历史上的今天】7 月 1 日:分时系统之父诞生;支付宝推出条码支付;世界上第一支电视广告
- 王兴的无限游戏迎来“终极”一战
- 用.Net Core接入微信公众号开发
- Detailed explanation of OSPF LSA of routing Foundation
- There are risks in trading
- Zero copy technology of MySQL
猜你喜欢
Shell script imports stored procedures into the database
CS5268优势替代AG9321MCQ Typec多合一扩展坞方案
leetcode:329. The longest incremental path in the matrix [DFS + cache + no backtracking + elegance]
VM虚拟机配置动态ip和静态ip访问
晓看天色暮看云,美图欣赏
logstash报错:Cannot reload pipeline, because the existing pipeline is not reloadable
工具箱之 IKVM.NET 项目新进展
我花上万学带货:3天赚3元,成交靠刷单
The popular major I chose became "Tiankeng" four years later
Wang Xing's infinite game ushers in the "ultimate" battle
随机推荐
Topic 2612: the real topic of the 12th provincial competition of the Blue Bridge Cup in 2021 - the least weight (enumerating and finding rules + recursion)
Zabbix 6.0 源码安装以及 HA 配置
晓看天色暮看云,美图欣赏
数论基础及其代码实现
【邂逅Django】——(二)数据库配置
System test UI test summary and questions (interview)
Idea of [developing killer]
网络socket的状态要怎么统计?
Different test techniques
快速整明白Redis中的压缩列表到底是个啥
Project deployment is not difficult at all!
Quickly understand what the compressed list in redis is
华为HMS Core携手超图为三维GIS注入新动能
Vs code set code auto save
SQLAlchemy在删除有外键约束的记录时,外键约束未起作用,何解?
Meta再放大招!VR新模型登CVPR Oral:像人一样「读」懂语音
Queue operation---
redis探索之缓存一致性
Localtime can't re-enter. It's a pit
Function test process in software testing