You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
问题提出:在做博客时会出现一个页面要显示的数据在多个不同的表中,有时需要将一个表的一个搜索结果作为另一个搜索的条件。举个例子:在登陆时,你可以输入你的是用户名登陆,但是在数据库里用password和id在表basic里,id,user_name,nickname,sex,age,email,phone....在basic_information里。如果有人用aaaa为用户名登陆,我就要搜索表basic_information找到aaaa对应的id,然后把这个搜索结果放到表basic里搜索password并进行匹配,这样会有很多问题。首先逻辑不易判断,要考虑在两个表间传递时可能出现的各种错误,而且性能上问题也会比较严重,所以引入“视图”。
先给一个基本定义:计算机数据库中的视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。(baike.baidu.com/link?url=KcZfe4OHUMZLAbXh1c4G8NPc1wkldMGec1s1i53jh3Q6vag4k596FUH9s8Yqts-6gR0OOzDQ-Q8Dyd18YryU1_)
还用我这个例子,我建立一个视图,将表basic和basic_information建立视图,
create algorithm=temptable view log_in (id,password,user_name) as select basic.id ,basic.password ,basic_information.user_name from basic ,basic_information where basic.id=basic_information.id;
tips:括号内的可以省略不写。
接着我只要搜索这个虚拟表log_in就可以了,这样就跳过了id这个中介,直接让买家(user_name)找到了卖家(password),你就能省下一笔中介费。
select * frm where user_name = "aaaa";
再从中提取出password进行匹配就OK了。
最后我们来删除这个没有用的视图,毕竟让一个存有用户名和密码的表存在是很危险的
Drop view log_in;
这样就算是彻底优化了我的登录功能。
现在我们知道视图是什么了,那么我们再来看看他都有什么功能:
1.合并多表:现阶段我们用的最多的功能。就像我这个例子,把多个表合并在一起提高搜索效率并简化查询语句。
2.权限控制:在开放权限时,可以只开放这个视图的权限,他们就不知道nickname,sex,age,email,phone....的信息,如果哪天有人让我提供昵称,我可再做一个视图而不用改我的整个表了。
3.大数据分表:表的行数据超过200万行时,速度就会变慢。如果我的博客系统做的很成功,有400万人用,那我为了兼顾效率,就要进行分表出处理,但是我不能在他们登陆时一个一个表去找啊,所以用视图把4个100万条数据的表组合起来
create view basic_informations as select * from basic_information1 union select * from basic_information2 union select * from basic_information3 union select * from basic_information4;
4.....(等待你们补充哦!)
made by mzt
本文参考引用: http://www.cnblogs.com/zzwlovegfj/archive/2012/06/23/2559596.html
baike.baidu.com/link?url=KcZfe4OHUMZLAbXh1c4G8NPc1wkldMGec1s1i53jh3Q6vag4k596FUH9s8Yqts-6gR0OOzDQ-Q8Dyd18YryU1_ http://www.cnblogs.com/wangtao_20/archive/2011/02/24/1964276.html http://blog.itpub.net/28194062/viewspace-772902/
The text was updated successfully, but these errors were encountered:
问题提出:在做博客时会出现一个页面要显示的数据在多个不同的表中,有时需要将一个表的一个搜索结果作为另一个搜索的条件。举个例子:在登陆时,你可以输入你的是用户名登陆,但是在数据库里用password和id在表basic里,id,user_name,nickname,sex,age,email,phone....在basic_information里。如果有人用aaaa为用户名登陆,我就要搜索表basic_information找到aaaa对应的id,然后把这个搜索结果放到表basic里搜索password并进行匹配,这样会有很多问题。首先逻辑不易判断,要考虑在两个表间传递时可能出现的各种错误,而且性能上问题也会比较严重,所以引入“视图”。
先给一个基本定义:计算机数据库中的视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。(baike.baidu.com/link?url=KcZfe4OHUMZLAbXh1c4G8NPc1wkldMGec1s1i53jh3Q6vag4k596FUH9s8Yqts-6gR0OOzDQ-Q8Dyd18YryU1_)
还用我这个例子,我建立一个视图,将表basic和basic_information建立视图,
create algorithm=temptable view log_in (id,password,user_name) as select basic.id ,basic.password ,basic_information.user_name from basic ,basic_information where basic.id=basic_information.id;
tips:括号内的可以省略不写。
接着我只要搜索这个虚拟表log_in就可以了,这样就跳过了id这个中介,直接让买家(user_name)找到了卖家(password),你就能省下一笔中介费。
select * frm where user_name = "aaaa";
再从中提取出password进行匹配就OK了。
最后我们来删除这个没有用的视图,毕竟让一个存有用户名和密码的表存在是很危险的
Drop view log_in;
这样就算是彻底优化了我的登录功能。
现在我们知道视图是什么了,那么我们再来看看他都有什么功能:
1.合并多表:现阶段我们用的最多的功能。就像我这个例子,把多个表合并在一起提高搜索效率并简化查询语句。
2.权限控制:在开放权限时,可以只开放这个视图的权限,他们就不知道nickname,sex,age,email,phone....的信息,如果哪天有人让我提供昵称,我可再做一个视图而不用改我的整个表了。
3.大数据分表:表的行数据超过200万行时,速度就会变慢。如果我的博客系统做的很成功,有400万人用,那我为了兼顾效率,就要进行分表出处理,但是我不能在他们登陆时一个一个表去找啊,所以用视图把4个100万条数据的表组合起来
create view basic_informations as select * from basic_information1 union select * from basic_information2 union select * from basic_information3 union select * from basic_information4;
4.....(等待你们补充哦!)
made by mzt
本文参考引用:
http://www.cnblogs.com/zzwlovegfj/archive/2012/06/23/2559596.html
baike.baidu.com/link?url=KcZfe4OHUMZLAbXh1c4G8NPc1wkldMGec1s1i53jh3Q6vag4k596FUH9s8Yqts-6gR0OOzDQ-Q8Dyd18YryU1_
http://www.cnblogs.com/wangtao_20/archive/2011/02/24/1964276.html
http://blog.itpub.net/28194062/viewspace-772902/
The text was updated successfully, but these errors were encountered: