MySQL视图的应用
视图也称虚表,包括执行某个查询返回的一组记录。视图可以简化获取数据的方法,并通过别名来实现抽象查询。
实例258:创建视图
实例说明
为了简化查询,在实际项目开发过程中,通常可以采用为数据库中的某个表建立视图的方式。在建立的视图中只有开发人员所关心的字段。运行本实例,如图9.6所示,分别在图中输入登录用户的用户名和密码,单击“进入”按钮后,如果用户输入错误的用户名或密码,则给出错误提示,反之如果输入的用户名和密码正确,则提示成功登录。由于本实例采用视图建立了虚表,所以应首先在“命令提示符”下建立视图,如图9.7所示。
图9.6 用户身份验证 |
图9.7 创建视图 |
技术要点
MySQL中创建视图可以通过create view语句来实现,具体创建格式如下:
$create [ or deplace] [algorithm={merge | temptable | undefined}] view view_name
[( column_list)] as select_statement [with [cascaded | local] check option] |
algorithm={merge | temptable | undefined}属性用于优化MySQL视图的执行,该属性有3个可用的设置。下面将介绍这3个设置的使用方法。
merge:该参数使MySQL执行视图时传入的任何子句合并到视图的查询定义中。
temptable:如果视图低层表中的数据有变化,这些变化将在下次通过表时立即反映出来。
undefined:当查询结果和视图结果为一一对应关系时,MySQL将algorithm设定为temptable。
view_name:新建视图的名称。
select_statement:SQL查询语句用于限定虚表的内容。
实现过程
(1)建立数据库及数据表,本实例中将数据表命名为tb_admin。
(2)建立完数据表后,就可以在命令提示符下建立视图。创建视图的代码如下:
create view chkadmin as select name, pwd from tb_admin |
创建完视图chkadmin后,该视图中只含有name和pwd两个字段,这样会给密码验证工作带来很大的方便。
(3)建立与MySQL数据库的连接。代码如下:
|
(4)判断用户是否单击了“进入”按钮,如果是则通过视图chkadmin对用户身份进行验证。该过程代码如下:
alert('用户名或密码输入错误!');history.back();";
exit;
}
else
{
echo " |
举一反三
根据本实例,读者可以:
利用视图实现用户信息注册。
利用视图实现商品信息的降序输出。
实例259:修改视图
这是一个修改视图的实例
录像位置:光盘\mingrisoft\09\259
实例说明
为了提高工作效率,对不满足条件的视图可以通过修改的方式进行更改。实现本实例,首先应在数据库中创建数据表tb_changeview,该表也可以在phpMyAdmin中创建,如图9.8所示。打开“命令提示符”窗口,创建视图userinfo,如图9.9所示。更改视图userinfo,如图9.10所示。
图9.8 创建表changeview |
图9.9 创建新视图 |
图9.10 修改视图 |
技术要点
MySQL中修改视图可以通过alter view语句实现,alter view语句具体使用说明如下:
alter view [algorithm={merge | temptable | undefined} ]view view_name
[(column_list)] as select_statement[with [cascaded | local] check option] |
algorithm:该参数已经在创建视图中作了介绍,这里不再赘述。
view_name:视图的名称。
select_statement:SQL语句用于限定视图。
实现过程
(1)建立数据库及数据表,本实例中将数据表命名为tb_changeview。
(2)创建视图userinfo。代码如下:
create view userinfo as select * from tb_changeview |
(3)查询视图userinfo。代码如下:
select * from userinfo |
查看执行结果,可以发现tb_changeview表中的所有的字段都一一列出。
(4)下面开始修改视图,要求修改后只列出username字段。代码如下:
alter view userinfo as select * from tb_changeview |
(5)重新查询视图userinfo,从结果中可以发现这时只列出username一个字段,从而说明视图修改成功。
(2)建立index.php文件,用于实现多表之间的查询,如果学生表和成绩表中有满足条件的记录,则显示这些记录,否则提示没有相关信息。代码如下:
举一反三
根据本实例,读者可以:
实现修改存储商品信息的视图。
实现修改存储用户注册信息的视图。
实例260:应用视图
这是一个应用视图的实例
实例位置:光盘\mingrisoft\09\260
实例说明
在实际的Web开发过程中,多个数据表中可能有很多的字段,但某个模块可能只需要其中的几个字段。为了提高查询速度和简便操作,可以将该模块需要的字段单独提取出来放在某视图中,例如本实例涉及到学生表和成绩表,在建立的视图中只含有与学生成绩有关的字段,如图9.11所示。运行本实例,如图9.12所示,图中的查询结果显示的字段即为视图中的所有字段。
图9.11 创建视图 |
图9.12 学生成绩列表 |
技术要点
本实例创建的视图涉及到多表查询,这说明多个表之间可以通过视图来组合为一个整体,这样对视图的操作相当于多表查询。但如果这些表中有相同的字段,必须按如下方式书写重名的字段:
表名1.字段名,表名2.字段名…… |
实现过程
(1)在“命令提示符”窗口下为数据库建立视图。代码如下:
create view scoreinfo as select sno,sname,
yw,wy,sx from tb_student,tb_score where tb_student.id=tb_score.sid |
(2)建立数据库连接文件conn.php。代码如下:
query("set names gb2312");
?> |
(3)查询视图scoreinfo中的内容,并显示查询结果。代码如下:
query("select * from scoreinfo");
$info=$sql->fetch_array(MYSQLI_ASSOC);
if($info==NULL)
{
echo "暂无学生信息";
}
else
{
do
{
?>
|
举一反三
根据本实例,读者可以:
实现多表之间的嵌套查询。
实现多表之间相同信息的提取