视图
视图是虚拟的表,与包含数据的表不一样,视图只包含使用时动态检索数据的查询,而自身不包含任何数据
为什么要视图
•重用SQL语句
•简化复杂的SQL操作
•使用表的组成部分而不是整个表
•保护数据。可以给用户授予表的特定部分的访问权限而不是整个表的访问权限
•更改数据格式和表示
视图的规则与限制
•与表一样,视图必须唯一命名
•在一个数据库中,可以创建的视图数目没有限制
•视图可以嵌套,即可以利用从其他视图中查询出来的数据构建新的视图
•Order by可以用在视图中,但如果从该视图检索数据的select中也含有order by,那么该视图中的Order by将会被覆盖
•视图不能索引,也不能有关联的触发器或默认值
•视图和表可以一起使用,例如编写一条联接表和视图的查询
创建视图
SQL语句:
CREATE VIEW myview1 AS
SELECT p.prodprice,p.prodname,t.typename
FROM product AS p
LEFT JOIN producttype AS t
ON p.typeid = t.id
接下来视图就可以像表一样使用了,但是视图的更新与表的操作有一些差别
视图的更新
•对视图进行insert update delete将会影响其基表,因为视图中不包含任何数据
•不是所有视图都可以更新,一下情况不能更新视图:
•含有分组(group by 和 having)
•联接查询
•子查询
•聚合函数
•DISTINCT
•不是迫不得已,不要对视图进行更新操作,因为效率低。视图主要用于查询。
简而言之,只有由单表查询建立视图可以更新。
存储过程
存储过程是一组为了完成某个特定功能而编写的并运行在数据库端的SQL程序集。
存储过程优点
1.通过把处理封装在简单易用的单元中,简化复杂的操作
2.提高性能。使用存储过程比使用单独的SQL语句要快
3.安全,调用者只需要调用指定的存储过程即可,而不用关心存储过程的内容
存储过程缺点
1.编写复杂
2.如果没有相应的权限,你将无法创建存储过程
创建存储过程
SQL语句:
DELIMITER // #定义开始符号
CREATE PROCEDURE findtype()
BEGIN
SELECT * FROM producttype;
END// #结束
简单的说就是将SQL写成了一个方法。
DELIMITER; #回复原来的分号;
#有返回值的
DELIMITER //
CREATE PROCEDURE findtypecount(OUT c INT,OUT p FLOAT)
BEGIN
SELECT COUNT(*) INTO c FROM product;
SELECT MAX(prodprice) INTO p FROM product;
END//
DELIMITER;
CALL findtypecount(@x,@y);
SELECT @x,@y;
未完待续