暂无 |

2 建立需要的View

不论是为了查询或维护,如果你很常需要使用到同一个查询叙述,你就可以考虑建立一个View元件把这个查询叙述储存起来。下列是建立View元件基本的语法:

mysql_11_snap_06

如果你很常执行查询「每个地区GNP最高的国家」资料,这样的需求可以使用子查询来完成,为了不想要每次重复输入这个查询叙述,你可以建立一个名称「CountryMaxGNP」的View元件,这样以后要执行这个查询的时候就方便多了:

mysql_11_snap_07

在上列建立View元件的范例中,只有「Name」与「GNP」两个栏位,如果想要在已经建立好的「CountryMaxGNP」的View元件中,再加入新的「Code」栏位的话:

mysql_11_snap_08

如果需要修改一个已经建立好的View元件,你就要加入「OR REPLACE」的设定,这样才不会出现错误讯息:

mysql_11_snap_09

如果想要查询一个View元件中会传回哪些栏位的资料,可以使用「DESCRIBE」或是比较简短的「DESC」指令:

mysql_11_snap_10

下列是MySQL关于View元件的规定与限制:

  • 在同一个资料库中,View的名称不可以重复,也不可以跟表格名称一样
  • View不可以跟Triggers建立联结

储存在View中的查询叙述也有下列的规定:

  • 查询叙述中只能使用到已存在的表格或View
  • 「FROM」子句中不可以使用子查询
  • 不可以使用「TEMPORARY」表格
  • 不可以使用自行定义的变数、Procedure与Prepared statement参数

注:「TEMPORARY」表格在「表格与索引、建立表格、建立暂存表格」中讨论。「Triggers」、定义变数、「Procedure」与「Prepared statement」在后面都会有章节详细的讨论。

结合查询在关联式资料库中几乎是必要的一种查询,以下列查询「国家与城市人口比例」的需求来说,就需要从「country」与「city」表格中查询必要的栏位资料:

mysql_11_snap_11

如果会经常执行这个结合查询的话,你应该会很希望把它储存为View元件:

mysql_11_snap_12

你不会在一个表格中,为不同的两个栏位取一样的名称;在使用查询叙述提供View元件的栏位时,也要注意名称重复的问题,虽然在单纯的结合查询回传的资料中,有一样的栏位名称并不会造成错误。要解决这个错误有两种方式,第一种是在查询叙述的「SELECT」子句中,自己为名称重复的栏位取不同的栏位别名:

mysql_11_snap_13

另外一种方式可以在建立View元件的时候,另外指定View元件的栏位名称:

mysql_11_snap_14

这样的作法不用修改查询叙述,依照查询叙述回传的栏位顺序,另外指定View元件使用的栏位名称:

mysql_11_snap_15

0

java教程
php教程
php+mysql教程
ThinkPHP教程
MySQL
C语言
css
javascript
Django教程

发表评论

    评价:
    验证码: 点击我更换图片
    最新评论