视图
什么是视图
视图是一个虚拟表,其内容由查询定义的。同真实的表一样,视图包含带名称的列和数据,但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。
为什么要有视图呢
视图是存储在数据库中的查询的SQL 语句,主要由两个原因,一个是安全原因,另一个是可使复杂的查询易于理解和使用。
这时候你可能会觉得安全很奇怪?这里怎么涉及安全了?
有时候根据角色的不同,用户得到的信息也不同,比如说一个用户如果要查看另一个用户的信息,有些隐私信息是不能返回的,这时候如果我们只提供一个视图查询,视图里面的属性都是规定好的,那么隐私信息便不会泄漏。
视图的使用
1.查看当前数据中所有视图
/* 之前测试是插入过两个视图,实际上我只选取了两列信息哈 */
select * from information_schema.views where table_schema = 'simfg';
2.创建单表视图
create view view_member (user_id,user_name,descp)
as select user_id,user_name,descp from member ;
3.使用视图
select * from view_member;
4.创建多表视图
create view
view_member_group
(user_id,user_name,descp,
group_name,group_type,group_desc)
as select a.user_id,a.user_name,a.descp,
b.name,b.type,b.description
from member a,`group` b
where a.group_id = b.id;
5.查看视图
desc view_member;
6.修改视图
/* 第1种 */
alter view view_membe (user_name,descp)
as select user_name,descp from member;
/* 第2种 */
create or replace view view_membe (user_name,descp)
as select user_name,descp from member;
7.删除视图
drop view view_member;
视图最好只用于查询数据,当然也可以进行插入、修改、删除,但是不是所有的视图都可以进行这些操作,需要满足视图与基本数据保持一对一的关系才可以进行这些操作
索引
什么是索引
索引就想字典的目录一样,当你需要查询每条数据的时候不需要去查询所有数据就可以找到相应的数据。
比如说:你拿一本汉语词典来查某个字,你肯定不是把字典从前往后一直看,直到找到相应的字为止,肯定是先翻到目录找到首字母,然后在查这个字。显然后 面这种方法效率更好,花费时间更少。
基本使用
1.创建索引
/* member_id_index 索引名 */
/* member(user_id) 指定member这个表中user_id这一列 */
create index member_id_index on member(user_id);
2.索引的删除
drop index member_id_index on member
由于本地没有那么多数据,所以这个无法演示效果
注意事项
1.优点:大大加快查询效率
2.缺点:维护索引需要耗费时间,且占部分物理空间
3.应该在需要频繁查询的列上加上索引
事务
什么是事务
有些时候,在系统中一连串的服务可能进行一系列的sql操作,如果失败一项则进行回滚,那么这一系列操作就是一个事务
基本命令
/* 设置事务事务 */
set tx_transcation = 'READ-UNCOMMITTED';
/* 开始事务 */
start transaction;
/* 提交事务 */
commit transaction;
/* 回滚事务 */
rollback;
Read Uncommitted
隐患:‘脏读‘,即读取到未提交的数据
事务中读取到未提交的数据
如何操作的呢?
1.开启两个命令行,并都登陆mysql
2.然后都设置事务等级为READ-UNCOMMITTED,并都开启事务
3.A窗口进行查询
4.在B窗口中进行修改数据操作,但不提交也不回滚
5.再一次在A窗口查询(发现数据不一样了)
6.B窗口事务回滚
7.最后在A窗口查询
Read Committed
隐患:‘不可重复读‘,即在一个事务中多次读取数据,结果不一样
操作:
将上诉第六个步骤修改为事务提交即可
效果和上诉一样
Repeatable Read(默认)
隐患:‘幻读‘,多次查询所得到的数据量不一样
可以看到同一事务中多次查询所得到的结果数量不一样
(在这之前你可以先试下是否还会出现‘不可重复读‘的现象)
操作:
1.开启两个命令行,并都登陆mysql
2.然后都设置事务等级为REPEATABLE-READ,并都开启事务
3.A窗口进行查询
4.在B窗口中进行添加数据操作,但不提交也不回滚
5.再一次在A窗口查询(发现数据不一样了)
6.B窗口事务回滚
7.最后在A窗口查询
Serializable(最高等级)
不存在隐患,强制性使事务排序
同时有多个事务存在时,不能在事务中进行数据的添加修改删除
这个需要修改mysql中的配置文件,所以就不演示了
欢迎大家留言转载
如果你觉得该文章还可以,关注微信公众号:SimFG,随时随地看博客要点