数据库之触发器和视图

数据库之触发器

说白了就是开关,就是字面意思,触发器里有一个动作,然后设置条件,达到某种条件自动触发这个触发器,然后运行这个触发器内部的动作。条件触发

before 一般用于 insert、update

after 一般用于 delete

删除触发器,删除表,用drop

例子:

1.创建触发器

--创建触发器
CREATE TRIGGER delete_student_trigger--创建触发器名叫delete_student_trigger
AFTER DELETE on student --在student表有删除操作后触发
for EACH ROW EXECUTE PROCEDURE student_delete_trigger();--触发器内部的方法。为每行运行这个叫student_delete_trigger()的方法

2.创建触发器执行函数(运行程序)

--创建触发器执行函数
CREATE or REPLACE FUNCTION student_delete_trigger()
RETURNS TRIGGER AS
$$
BEGIN
DELETE FROM score
WHERE student_no = OLD.student_no;--OLD是针对触发器设定的那个表来说的,在这里相当于old student那个表里的student_no
--何为新旧?只有发生修改,或者叫做变化了之后,才分新旧。对于这里来说,
--只有删除student_no=3这个操作产生了变化,所以只有这行数据才有新旧的变化
--旧就是代表student_no=3,新就是被删除了,null,所以DELETE FROM score WHERE student_no = OLD.student_no
--这个删除的就是score原表中student_no=3的对应整条数据。
RETURN OLD;
END;
$$
language 'plpgsql';

3.创建学生表和成绩表

--创建学生表
create table student(
student_no INT PRIMARY KEY,
student_name VARCHAR(40),
age int
);

--创建成绩表
CREATE table score(
student_no INT,
chinese_score INT,
math_score INT,
test_date date
);

4.插入测试数据

--插入测试数据
INSERT INTO student VALUES(1, '张三', 14);
INSERT INTO student VALUES(2, '李四', 13);
INSERT INTO student VALUES(3, '王二', 15);
INSERT INTO score VALUES(1, 85, 75, date '2013-05-23');
INSERT INTO score VALUES(1, 80, 73, date '2013-09-18');
INSERT INTO score VALUES(2, 68, 83, date '2013-05-23');
INSERT INTO score VALUES(2, 73, 85, date '2013-09-18');
INSERT INTO score VALUES(3, 72, 79, date '2013-05-23');
INSERT INTO score VALUES(3, 78, 82, date '2013-05-23');

5.测试

DELETE FROM student where student_no = 3

--测试成功,带3的没了,如果想复习的话记得把这两个表中的3 的数据回复再运行程序

视图

视图是一个虚拟的表,对真实的数据库表进行归纳总结出来的一个表,可以增加查询速度,设置点模板啥的,可以加限制,让别人只能查,不能增删改。

代码如下:

创建视图

CREATE VIEW v_jishi as
SELECT u_id,"jishiA".c_name,n_price,n_year,c_address,n_tel,n_age,n_weight,c_sex FROM "jishiA" LEFT JOIN "jishiB" ON "jishiA".c_name = "jishiB".c_name

查询视图

SELECT * FROM "v_jishi"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值