既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
1.创建测试表、视图
CREATE TABLE COMPANY(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);
CREATE TABLE AUDIT_HIS(
EMP_ID INT NOT NULL,
EMP_NAME TEXT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);
CREATE TABLE AUDIT(
EMP_ID INT NOT NULL,
EMP_NAME TEXT NOT NULL,
ENTRY_DATE TEXT NOT NULL
);
CREATE OR REPLACE VIEW "public"."company_view" AS
SELECT company.id,company.name,company.age
FROM company;
2.创建触发器函数
CREATE OR REPLACE FUNCTION auditlogfunc() RETURNS TRIGGER AS $$
BEGIN
INSERT INTO AUDIT_HIS(EMP_ID,EMP_NAME,ENTRY_DATE) VALUES (OLD.ID,OLD.NAME,current_timestamp);
INSERT INTO AUDIT(EMP_ID,EMP_NAME,ENTRY_DATE) VALUES (NEW.ID,NEW.NAME,current_timestamp);
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
注:
a.触发器函数是触发器触发时调用,函数返回的类型必须是TRIGGER ,且不能有任何参数
b.postgresql触发器函数中自带一些特殊变量:
- NEW:数据类型是record,在insert、update操作触发时存储新的数据行
- OLD:数据类型是record,在update、delete操作触发时存储旧的数据行
- TG_OP:内容为“INSERT”,“UPDATE”,“DELETE”,“TRUNCATE”,用于指定DML语句类型
- TG_TABLE_NAME:触发器所在表的表名称 TG_SCHEMA_NAME:触发器所在表的模式
3.创建触发器
3.1表触发器
CREATE TRIGGER example_trigger AFTER INSERT OR UPDATE ON COMPANY
FOR EACH ROW EXECUTE PROCEDURE auditlogfunc();
3.2视图触发器
CREATE TRIGGER company_view_trigger AFTER UPDATE ON company_view
EXECUTE PROCEDURE auditlogfunc();
注:视图触发器不支持行级,即 不能添加FOR EACH ROW
4.删除触发器
DROP TRIGGER example_trigger on COMPANY;
5.删除函数
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**