Mysql入门第四课 视图和存储程序
来源:互联网 发布:windows xp pe下载 编辑:程序博客网 时间:2024/05/16 11:46
1. 视图是一个虚表,它像一个表,但实际上又不包含数据。其实,它是根据表和其他视图来进行定义的,并且提供了另一种查看数据的方式。
使用select 语句来定义视图,查询视图就等效于查询定义它的那条语句,只是视图将细节隐藏起来。视图定义里可以包含表达式计算和连接等操作。
一个基本的视图可以只选择表的部分列。假设经常要从student这个表中只取name, addr, score这3列,但是并不想使用 select name, addr,score from student.;同时也不想用select *from语句,这个时候你就可以定义一个视图,让它只显示你想要显示的那些列。
CREATE VIEW vpres AS SELECT name, addr, score from student;(大写的为关键字)
通过上面这个视图,你可以只看到你想看到的列。在视图中使用select *from 显示你定义的想看到的列 SELECT *FROM vpres;
如果在查询视图时包含了WHERE字句,可以进一步的对显示的内容进行限制。
SELECT *FROM vpres WHERE name=" lai";
如果添加ORDER BY, LIMIT等字句也可限制。
在默认的情况下,视图里的列名与其SELECT语句里列出的输出列名相同。如果想要显示地改变其他列名,那么需要在视图定义里,紧跟视图名字的后面用括号列出那些新名字:
CREATE VIEW vpres(in, fn) AS SELECT name, score FROM student;
这样定义之后,显示视图就要用SELECT in,fn FROM vpres; 而不能用name, score
有些视图是可更新的,也就是说,可以通过操作视图,对顶层表里的那些行实现插入、更新或删除操作:
//创建一个表,并且定义视图
CREATE TABLE t (i int );
INSERT ONTO t (i) VALUES (1), (2),(3);
CREATE VIEW v AS SELECT i FROM t;
SELECT i FROM v;
//通过视图对底层表的行进行插入与删除
INSERT INTO v (i) VALUES (4);
DELETE FROM v WHERE i<3;
SELECT i FROM v;
//进行更新操作
UPDATE v SET i=i+1;
SELECT i FROM v;
如果想要让一个视图更新,必须让它直接映射到一个表上,它所选择的那些列必须是对表中各列的简单引用,并且对视图某行的任何操作必须与底层表中某一行的操作相对应。例如如果某个视图中有一个聚合函数计算得到的“汇总”列,那么这个行就涉及很多行,不能对其进行更新。
2.如何写复合语句
复合语句有begin 和end 块构成,两者之间可以有任意条语句。以下是一个例子,
在上面复合语句中,在块内的语句之间必须使用分号;进行分隔,但是分号又同时是客户端程序mysql默认语句结束符,因此要用delimiter 语句定义一个mysql的默认语句分隔符,实现mysql不用讲分号解释为结束符,而是将整个复合语句作为一个整体。在定义完存储程序之后,还可以再次更改默认结束符为分号。
分隔符不一定得是美元符号,也可以是其他的。
3.存储函数和存储过程
存储函数常用在表达式里,它会执行计算并返回一个值,存储过程使用call语句来调用的独立操作,不能用在表达式里。适用于使用存储过程的情况有两种:
只需通过运算来实现某种效果或动作,不需要返回值;
运算结果需要返回多个结果集(函数无法做到这一点)
存储函数可以用CREATE FUNCTION 函数名(变量)
RETURNS type
函数体语句
存储过程可以用CREATE PROCEDURE 名 (变量)
函数体语句
下面是一个例子(注意returns和return)
delimiter $
create function 函数名 (变量声明)
returns int 或者其他数据类型
begin
...这里有return语句
end$
函数体中至少要包含一条return语句,用来向调用者返回一个值。将一个计算定义为函数,可以方便执行它,不需要反复写出所以逻辑步骤。
但函数无法返回多个函数值,要让函数返回多个值,一种方法是编写多个函数,然后再同一个语句中调用所以这些函数;另一种办法是使用一个存储过程,通过它的out参数“返回”这些值。
存储过程和存储函数相似,但是存储过程没有返回值。因此它没有任何returns字句或者return语句。它会显示一个结果集,而不是一个表达式计算结果。只能通过call语句来调用它。
存储过程的参数分为3种类型。对于IN 参数,调用者会把一个值传递到过程里。这个过程可以对这个值进行修改,但在过程返回之后任何修改对调用者来说都是不可见。OUT参数则正好相反。过程把某个值赋给这个参数,但在过程返回后该值可以被调用者访问。
显示指定参数类型的方法是,在参数列表里的参数名前面使用IN、OUT或INOUT 。如果没有为参数指定类型,则默认类型是IN
如果想返回多个结果,用OUT和INOUT。
4.触发器
触发器是与特定表想关联的存储过程,其定义会在执行表的insert、delete、update语句时,会被自动激活。触发器的定义里包含有一条会在触发器被激活时执行的语句。
CREATE TRIGGER 触发器名称
{ BEFORE| AFTER} 触发器激活的时机
{INSERT|DELETE|UPDATE} 触发器激活的语句
ON tbl_name 关联表的名字
FOR EACH ROW trigger_stmt 触发器内容
在下面的这个例子中
create table t (percent int , dt datetime);
delimiter $
create trigger bi_t BEFORE INSERT ON t
FOR EACH ROW BEGIN
IF NEW.percent <0 THEN
SET NEW.percent=0;
ELSEIF NEW.percent >100 THEN
SET NEW.percent=100;
END IF ;
END $ NEW.dt=CURRENT_TIMESTAMP;
END $
delimiter ;
这个触发器将完成两个动作。
如果要插入的百分比值超出了0~100的范围,那么这个触发器将把该值转换成最靠近端的那个值
这个触发器会自动为那个DATETIME列提供一个CURRENT_TIMESTAMP值。
6.事件
MYSQL 有一个事件调度器,它可以定时激活多个数据库操作。事件就是一个与计划相关联的存储程序。
- Mysql入门第四课 视图和存储程序
- Mysql视图和存储过程
- mysql技术内幕总结篇 (一)存储程序和视图的安全性
- mysql 视图操作和存储过程
- Mysql视图操作和存储过程
- mysql 视图、存储过程和函数
- mysql存储过程,视图和触发器
- mysql视图,索引和存储过程
- MySql视图、存储过程和触发器
- MYSQL存储过程和存储函数入门
- 第四章 MySQL程序
- MySQL 视图入门
- MySQL入门之视图
- MYSQL数据库的索引、视图、触发器、游标和存储过程
- [MySQL] 存储过程、函数、触发器和视图的权限检查
- [MySQL] 存储过程、函数、触发器和视图的权限检查
- mysql查询存储过程和函数、视图、触发器
- MYSQL数据库的索引、视图、触发器、游标和存储过程
- mysql连接失败access denied for user root @localhost
- C#List泛型集合
- IllegalThreadStateException: Thread already started解决
- DDMS android 开发工具-----dump View Hierarchy for UI automator
- JS创建对象的几种方式
- Mysql入门第四课 视图和存储程序
- 机器学习:SVM学习笔记(三)
- c++中的delete []异常
- How a Cursor becomes Bind Aware?
- JAVA HTTPClient PostMethod 中文乱码问题解决方法
- Java实现栈结构详细代码
- uestc876爱管闲事【区间dp】
- 空间直方图Meanshift跟踪—代码
- TreeSet练习题