[关闭]
@3013216027 2016-01-28T13:18:36.000000Z 字数 2975 阅读 943

第8章 视图与索引

数据库原理复习专栏


虚拟视图

  1. create view employees_view as
  2. select emp_no as id, concat(first_name, ' ', last_name) as name
  3. from employees;

便定义了一个视图(相当于一张表),提取了employees表中的3个字段,并且将emp_no重命名(别名, , )为id,将first_namelast_name通过系统字符串函数concat连接并命名为name,因此新的(虚拟)表employees_view包含两个字段idname。通过show tables;可以看到employees_view和普通的表一样被列了出来,并且可以对它进行任何和普通表一样的操作(增删改查,但前3者仅对可更新视图有效)。

  1. CREATE VIEW employees_view(id, name) AS
  2. SELECT emp_no, CONCAT(first_name, ' ', last_name)
  3. FROM employees;

即在视图名后带上新的属性名来达到同样的效果。

习题 8.1.1

  1. create view RichExec as
  2. select name, address, cert, netWorth
  3. from MovieExec
  4. where netWorth > 1000000;
  1. create view StudioPress as
  2. select name, address, cert
  3. from MovieExec
  4. where (name) in
  5. (select (presC\#) from Studio);
  1. create view ExecutiveStar as
  2. select S.name as name, S.address as address, gender, birthdate, cert, netWorth
  3. from MovieStar S inner join MovieExec;

视图更新

  1. create view fox as
  2. select title, year
  3. where studioName = 'Fox';

可以选出所有福克斯电影公司的电影及其年份。它满足上面的可更新视图的要求,我们自然知道,该视图中仅存放了福克斯公司出品的电影,但在插入时却会被自动设置为,于是可以使用一个触发器来代替完成插入功能:

  1. create trigger foxInsert
  2. instead of insert on fox
  3. referencing new row as newrow
  4. for each row
  5. insert into Movies (title, year, studioName)
  6. values (newrow.title, newrow.year, 'Fox');

当然,话说回来,劳资费这劲儿干嘛呢!


索引

习题 8.4.2

操作 无索引 索引 索引 索引 概率
平均

物化视图

  1. CREATE MATERIALIZED VIEW MovieProd AS
  2. SELECT title, year, name
  3. FROM Movies, MovieExec
  4. WHERE producer = cert;

当然,是不资瓷这个东西的。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注