@3013216027
2016-01-28T13:18:36.000000Z
字数 2975
阅读 943
数据库原理复习专栏
create view <视图名> as
,后面的语句和之前的select
语句一毛一样。换句话说,视图就像一个指向某select
语句的指针!CREATE VIEW <视图名> AS <视图定义>;
,如:
create view employees_view as
select emp_no as id, concat(first_name, ' ', last_name) as name
from employees;
便定义了一个视图(相当于一张表),提取了employees
表中的3个字段,并且将emp_no
重命名(别名, , )为id
,将first_name
和last_name
通过系统字符串函数concat
连接并命名为name
,因此新的(虚拟)表employees_view
包含两个字段id
和name
。通过show tables;
可以看到employees_view
和普通的表一样被列了出来,并且可以对它进行任何和普通表一样的操作(增删改查,但前3者仅对可更新视图有效)。
视图查询,如上所述,可以直接通过(虚拟)表employees_view
查询其中的信息:select * from employees_view limit 10;
、select * from employees_view where name = 'gongbaojin';
、select id from employees_view where name = 'Kruskal David';
等等。
属性重命名,上例通过在查询语句中使用as
实现属性重命名(emp_no
id
),另外可以通过
CREATE VIEW employees_view(id, name) AS
SELECT emp_no, CONCAT(first_name, ' ', last_name)
FROM employees;
即在视图名后带上新的属性名来达到同样的效果。
create view RichExec as
select name, address, cert, netWorth
from MovieExec
where netWorth > 1000000;
create view StudioPress as
select name, address, cert
from MovieExec
where (name) in
(select (presC\#) from Studio);
create view ExecutiveStar as
select S.name as name, S.address as address, gender, birthdate, cert, netWorth
from MovieStar S inner join MovieExec;
drop view <视图名>
,就删掉了。根据前面的比喻,我们相当于删除了一个指针,或者说一个快捷方式,原本的数据表不受任何影响。可更新视图,要求:视图是由从单个关系(就是单个表,当然,可以是虚拟表视图)中选取的一些属性组成(简单,注意如果是则不行,因为选取出数据后会去重,相当于破坏了最原始的取出的那份数据)。于是:
满足上述条件便可以通过更新视图来同时达到更新关系的效果。对满足上述条件的视图,也就可以愉快地更新了。
create view fox as
select title, year
where studioName = 'Fox';
可以选出所有福克斯电影公司的电影及其年份。它满足上面的可更新视图的要求,我们自然知道,该视图中仅存放了福克斯公司出品的电影,但在插入时却会被自动设置为,于是可以使用一个触发器来代替完成插入功能:
create trigger foxInsert
instead of insert on fox
referencing new row as newrow
for each row
insert into Movies (title, year, studioName)
values (newrow.title, newrow.year, 'Fox');
当然,话说回来,劳资费这劲儿干嘛呢!
CREATE INDEX <索引名> ON <关系名>(<欲用以建立索引的属性名>)
,如create index keyindex on Movies(title, year);
DROP INDEX <索引名>
索引的选择,最有用的索引是建立在主键上的索引,原因:
where
语句来使用但是事实上,一般只要保证被索引的属性上存在相同属性值的元组比较少就可以起到比较好的效果。
操作 | 无索引 | 索引 | 索引 | 索引 | 概率 |
---|---|---|---|---|---|
平均 |
CREATE MATERIALIZED VIEW MovieProd AS
SELECT title, year, name
FROM Movies, MovieExec
WHERE producer = cert;
当然,是不资瓷这个东西的。