数据库之触发器
说白了就是开关,就是字面意思,触发器里有一个动作,然后设置条件,达到某种条件自动触发这个触发器,然后运行这个触发器内部的动作。条件触发
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"