MySQL数据库基础知识五(视图和存储程序)

使用视图

视图是一个虚表,它是在表或其他视图的基础上,使用SELECT语句来定义的。

创建视图:

create view view_name as select last_name,first_name from president;//创建虚表view_name,表为2列,表中数据来自于president

select * from view_name;

select last_name from view_name where last_name = 'ad';

order by,limit等子句。

创建视图并更改列名

create view  view_name(ln,fn) as select last_name,first_name from president;//虚表中的列名改为ln和fn。

视图用于定义语句较为复杂的查询。

create view grade_stats as

select

grade_event.date,grade_event.category,

MIN(score.score) as minimum,

MAX(score.score) as maximum,

MAX(score.score)-MIN(score.score)+1 as span,

SUM(score.score) as total,

AVG(score.score) as average,

COUNT(score.score) as count

from score inner join grade_event

on score.event_id = grade_event.event_id

group by grade_event.date;

通过这个试图进行查询,会执行连续操作,并检索计算的结果。

select * from grade_status;



复合语句和语句分隔符

对于复合语句,在块内的语句之间必须使用分号“;”进行分割,由于客户端程序mysql也会使用“;”,会起冲突,所以使用delimiter关键字,对mysql客户端分隔符进行重设’

创建存储过程

delimiter $

create procedure show_times()

BEGIN

     select current_timestamp as 'Local Time'

     select UTC_TIMESTAMP AS 'UTC TIME';

END$

delimiter;

call show_times();

存储函数和存储过程

创建存储函数

delimiter $

create function count_born_in_year(p_year INT)

returns int

reads sql data

begin

  return(select count(*) from president where year(birth) = p_year;

END$

delimiter;

调用:select count_born_in_year(1400);

存储过程的参数类型3中

IN参数,调用者会把一个传导过程里面,进行参数修改,但是结束后,调用者不能访问

out参数,调用者能访问

input 参数允许调用者向过程传递一个值再取回一个值。

触发器

1.利用触发器来实现数据完整性约束

2.可以给予某个表达式来为列提供默认值

3.可以在行删除或更新之前先检查行的当前内容。

创建一个触发器,超过0~100范围的按最近的添加,还添加当前的日期

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;

使用

INSERT INTO t(percent) VALUES(-2); DO SLEEP(2);

事件

事件调度器是否开着。

SET GLOBAL event_scheduler = ON;

创建事件的基本语法:

create event event_name

   on schedule {at datetime| every expr interval[starts datetime][ends datetime]}

   do event_stmt

如每四小时定时清理

create event expire_web_session

  on schedule every 4 hour

  do

      delete from web_session

      where last_visit < CURRENT_TIMESTAMP - INTERVAL 1 DAY;

如果创建一个只执行一次的则:

on schedule at CURRENT_TIMESTAMP + INTERVAL 1 HOUR

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值