10.13 视图

1、什么是视图 视图就是通过查询得到一张虚拟表,然后保存下来,下次用的直接使用即可

2、为什么要用视图 如果要频繁使用一张虚拟表,可以不用重复查询

3、如何使用视图

视图记录的增、删、改和表方法相同,但改变视图记录,原始表也跟着改,所以不要修改视图记录,只用于查看

create view teacher2course as                                #创建视图
select * from teacher inner join course on teacher.tid = course.teacher_id;
​
alter view teacher2course as                                 #修改视图名
select * from teacher inner join course on teacher.tid = course.teacher_id;
​
drop view teacher2course;                                    #删除视图

强调: 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常用于查询,尽量不要修改视图中的数据

10.14 触发器

触发器:在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器 触发器专门针对我们对某一张表数据增insert删delete改update的行为,这类行为一旦执行就会触发触发器的执行,即自动运行另外一段sql代码

创建触发器语法:

# 针对插入(insert)
create trigger tri_after_insert_t1 after insert on 表名 for each row
begin
    sql代码...
endcreate trigger tri_before_insert_t2 before insert on 表名 for each row
begin
    sql代码...
end
​
# 针对删除(delete)
create trigger tri_after_delete_t1 after delete on 表名 for each row
begin
    sql代码...
endcreate trigger tri_before_delete_t2 before delete on 表名 for each row
begin
    sql代码...
end
​
# 针对修改(update)
create trigger tri_after_update_t1 after update on 表名 for each row
begin
    sql代码...
endcreate trigger tri_before_update_t2 before update on 表名 for each row
begin
    sql代码...
end

举例:

CREATE TABLE cmd (
    id INT PRIMARY KEY auto_increment,
    USER CHAR (32),
    priv CHAR (10),
    cmd CHAR (64),
    sub_time datetime, #提交时间
    success enum ('yes', 'no') );
CREATE TABLE errlog (
    id INT PRIMARY KEY auto_increment,
    err_cmd CHAR (64),
    err_time datetime);
    
delimiter $$
create trigger tri_after_insert_cmd after insert on cmd for each row
begin
    if NEW.success = 'no' then      #等值判断只有一个等号
        insert into errlog(err_cmd,err_time) values(NEW.cmd,NEW.sub_time);
    end if;
end $$
delimiter ;
​
insert into cmd (USER,priv,cmd,sub_time,success) values
    ('egon','0755','ls -l /etc',NOW(),'yes'),
    ('egon','0755','cat /etc/passwd',NOW(),'no'),
    ('egon','0755','useradd xxx',NOW(),'no'),
    ('egon','0755','ps aux',NOW(),'yes');
​
mysql> select * from errlog;        #查询错误日志,发现有两条
+----+-----------------+---------------------+
| id | err_cmd         | err_time            |
+----+-----------------+---------------------+
|  1 | cat /etc/passwd | 2017-09-14 22:18:48 |
|  2 | useradd xxx     | 2017-09-14 22:18:48 |
+----+-----------------+---------------------+
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2018-09-18
  • 2021-09-04
  • 2021-11-27
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-30
  • 2021-10-15
  • 2021-05-11
相关资源
相似解决方案