数据库操作之——高阶操作
一 视图操作
1 视图的定义
视图是一个虚拟表,表中是无数据的,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是,视图并不在数据库中以存储的数据值集形式存在。行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。视图的数据是来自与基表。
2 如何使用视图
2-1 创建视图
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] VIEW [db_name.]view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
mysql> create view test_view as select * from teacher inner join course on teacher.tid=course.teacher_id; Query OK, 0 rows affected (0.30 sec)
使用视图,这是退出后重新登录后。
2-2查询视图结构
mysql> desc test_view; +------------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +------------+-------------+------+-----+---------+-------+ | tid | int(11) | NO | | 0 | | | tname | varchar(32) | NO | | NULL | | | cid | int(11) | NO | | 0 | | | cname | varchar(32) | NO | | NULL | | | teacher_id | int(11) | NO | | NULL | | +------------+-------------+------+-----+---------+-------+ 5 rows in set (0.01 sec)
2-3删除视图:
mysql> drop view test_view;
Query OK, 0 rows affected (0.00 sec)
2-4视图是一张虚表,表中并无数据,所以我们是不能对存储表做修改的,只能对基表进行修改。
3 视图存在的价值
3-1 安全性。视图可以隐藏一些数据,当我们数据表中有些字段 不方便透露的时候,我们可给视图表创建字段来接受视图查询出来的字段。如下,我们创建了三个字段来接受查询的结果。
3-2 视图能简化用户操作。这可以让我们专心在数据处理上,因为我们视图的数据是来自基表的。视图存储的数据一般都是我们常用的字段,使用视图就直接查询出我们要用的数据。
3-3 视图对重构数据库提供了一定程度的逻辑独立性。数据的物理独立性是指用户的应用程序不依赖于数据库的物理结构。数据的逻辑独立性是指当数据库重构造时,如增加新的关系或对原有的关系增加新的字段,用户的应用程序不会受影响。层次数据库和网状数据库一般能较好地支持数据的物理独立性,而对于逻辑独立性则不能完全的支持。
二 触发器
1 什么是触发器
当我执行一个事件时,同时也去执行另外一个事件。触发器是一个特殊的存储过程,不同的是存储过程要用CALL来调用,而触发器不需要使用CALL,也不需要手工启动,只要当一个预定义的事件发生的时候,就会被MYSQL自动调用。
2 触发器的语法
CREATE TRIGGER <触发器名称> --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
{ BEFORE | AFTER }
--触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE }
--同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
ON <表名称>
--触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW
--触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句>
--触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。
三存储过程
1 为什么使用存储过程
要了解为什么使用存储过程,我们先来看看我们在使用sql操作时的一个流程。下面这张图是截屏慕课网视频教程的图片。
通过查看上面的图片,我们不难看出在执行sql操作过程中的流程是要经过多个过程,如果我们的网站数据量比较小还好,如果大型网站,这样执行下来不久很慢了。如果我们能从中省略一些步骤或者说可以把一些查询到数据暂时存储起来,我们在下次使用的时候,就直接使用存储起来的数据,这样数据的加载就块很多了。这就是存储的目的。
2 如何使用存储过程
四 事务处理