一、视图
1、简介:视图就是通过查询得到虚拟表的实体化,保存于硬盘,下次或其他窗口也可以使用。
2、用途:若一份虚拟表需要重复使用,可以考虑使用视图来简化后续操作。
3、注意:
①视图虽然也是存于硬盘的表,但是该表只有表结构,没有表数据,上面显示的数据还是来自于查询目标的表。
②视图一般只用来再查询,最好不要修改里面的数据,以防影响原表。
③视图最好不要过多创建,以免增加维护难度。
4、基本语法:create view 视图名 as 查询语句
二、触发器
1、简介:触发器就是绑定某表的某项操作(增/删/改)之前或结束能自动触发定义好功能的机制,一般用于监控或记录日志等。
2、基本语法:create trigger 触发器名 before/after insert/update/delete on 表名 for each row begin 触发语句 end
3、delimiter:用于修改sql语句的默认结束符,如,delimiter $$---将默认结束符“;”改为了“$$”。
4、实例:
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 ); """ 当cmd表中的记录succes字段是no那么就触发触发器的执行去errlog表中插入数据 NEW指代的就是一条条数据对象 """ 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 ; # 朝cmd表插入数据 INSERT INTO cmd ( USER, priv, cmd, sub_time, success ) VALUES (‘jason‘,‘0755‘,‘ls -l /etc‘,NOW(),‘yes‘), (‘jason‘,‘0755‘,‘cat /etc/passwd‘,NOW(),‘no‘), (‘jason‘,‘0755‘,‘useradd xxx‘,NOW(),‘no‘), (‘jason‘,‘0755‘,‘ps aux‘,NOW(),‘yes‘); # 删除触发器 drop trigger tri_after_insert_cmd;
三、事务
1、简介:事务就是把多条需要同时执行的sql语句绑定成组合的机制,组合中的sql语句要么同时成功,要么同时失败,以此确保数据操作的完整性。
2、特性:
①原子性:一个事务中的多条sql语句相互是无可分割的。
②一致性:一个事务中的多条sql语句必定是同时执行,同时成功或同时失败。
③隔离性:一个事务执行的过程中不会被其他事务干扰,类似于并发程序的互斥锁,并发事务对数据的操作也是互不干扰的。
④持久性:一个事务一旦执行成功,其执行结果会立即生效,硬盘上的数据则立刻被执行了相应的修改,这个操作是永久的,而非临时性的,且不可回撤。
3、rollback:回滚,事务开启后,无论已经执行了多少条sql语句,一旦遇到回滚,则立即回到事务开启前的状态。
4、commit:确认,确认之后则无法再使用回滚,相当于事务真正执行结束了。
3、基本语法:start transaction;sql语句1; sql语句2; rollback; sql语句3;sql语句4; commit
四、