1、视图: 定义:通过查询一张虚拟表,然后保存下来,下次直接使用即可,可以不需要重复查询。 使用: create view teacher_course as select * from teacher inner join course on teacher.tid = course.teacher_id; 强调: 1、在硬盘中,视图只有表结构文件,没有表数据文件 2、视图通常用于查询,可以通过修改视图里的数据进而影响到原始表里的数据,因此尽量不要修改视图中的数据 3、在实际开发 过程中不会过多的使用视图,视图是mysql的功能。当需要扩展某个功能时同时需要对视图进行修改, 此时先要将视图修改,然后再去程序里修改对应的sql语句,这些操作会涉及跨部门沟通,因此通常不会使用视图,而是 重新修改sql语句来扩展功能
2、触发器 定义:在满足对某张表数据的增、删、改的情况下,自动触发的功能称之为触发器 触发条件:在对表进行增insert,删delete,改update的情况下,自动触发执行sql语句 标准语句结构: create trigger 触发器名字 after insert on 表名 for each row begin sql语句 end
修改之前 create trigger tri_before_update_t1 before update on t1 for each row begin sql语句 end 修改之后 create trigger tri_after_update_t1 after update on t1 for each row begin sql语句 end
删除之前 create trigger tri_before_delete_t1 before delete on t1 for each row begin sql语句 end 删除之后 create trigger tri_after_delete_t1 after delete on t1 for each row begin sql语句 end
增加数据之后 create trigger tri_after_insert_t1 after insert on t1 for each row begin sql语句 end 增加数据之前 create trigger tri_before_insert_t1 before insert on t1 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') #0代表执行失败 ); CREATE TABLE errlog ( id INT PRIMARY KEY auto_increment, err_cmd CHAR (64), err_time datetime ); delimiter $$ # 将mysql默认的结束符由;改成$$ 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 ;
事务 待续