一、视图
当查询的复杂度很高时,指多字段,多关系查询,会导致sql语句混乱。
定义:这时,就可以将sql语句存到视图当中,它是一个虚拟的表,有字段和数据,只存放查询语句,基于源表。
特点
优
1.简单:视图构建了一个虚拟的表,表里的数据是来源于复杂的查询语句,我们将复杂的查询语句存入视图,使用时直接调用视图。
2.安全:数据库有对库和表的权限管理,但是没有对字段的,可以通过视图来实现对字段的权限管理。
3.数据独立性:源表结构发生变化时,视图不会受到影响;但修改视图,会影响源表。
缺
1.使用视图时,一半存放的都是复杂的查询。但如果存入的是简单查询,会被作为复杂查询去执行,会降低查询效率。
2.会增加数据库的维护和管理成本,会对数据迁移造成很大影响。
!!!注意:视图可以作为查询条件使用,但不推荐。
创建视图
格式:create view 视图名 as (查询语句);
查看视图
格式:show table status where comment=‘view’;
使用视图
格式:select * from 视图名;
删除视图
格式:drop view 视图名;
二、触发器Trigger
触发器的内部也是sql语句。
由谁触发
触发触发器是一个特殊的存储过程。
什么时候会触发
当我们在做添加,删除,修改操作时会自动触发触发器。
创建触发器
在正式创建前,需要先修改sql语句的默认结束符,这里修改为了||。
格式:
create trigger
触发器名 触发时机 触发事件
on 表名 for each row
begin
触发器要执行的sql语句;
end||
触发时机:after、before
触发事件:insert、update、delete
使用触发器
执行触发事件。
查看触发器
格式:select * from information_schema.triggers;
删除触发器
格式:drop trigger 触发器名;
例题1:给user表创建一个触发器,当向user表中添加数据时,给userinfo也添加一条数据。
例题2:数据备份,当我们删除user表中的数据时,将删除的数据备份到back_user表中。
三、事务(针对数据)
基本操作
begin:开启一个事务
commit:提交一个事务
rollback:回滚
!!注意:在事务中进行的增删改操作,不提交在外部无变化。
提交后,外部就有变化了
rollback
若一个事务正在进行,还没有提交或回滚,那么另一个事务的操作将会被阻塞。
事务提交后,另一个事务就可以执行了。
但根据结果发现,后来的事务对这条数据的修改操作并没有生效,这是为什么呢?
因为第一个事务提交了,已经将这条数据的name字段值改为了“吕哈哈”,所以另一个事务再修改数据的时候并没有找到可以匹配where条件的数据。
这里要特别注意。