MySql视图和存储程序

1、视图

1、创建视图

create view(字段别名...) as 选择语句
例:
create view(ln,fn) as select last_name,first_name from student;

2、可以通过视图对底层表进行增删改查操作。

2、存储程序

1、复合语句和语句分隔符

delimiter 分隔符名
create procedure 函数名()
begin
函数体
end;
delimiter #结束分隔符
call 函数名

例:
delemiter $
create procedure show_times()
begin
select CURRENT_TIMESTAMP as 'Local Time';
select UTC_TIMESTAMP as 'UTC Time';
end$
delemiter
call show_times(); #调用

2、存储函数和存储过程

create function 函数名(参数列表)
returns type stmt
create procedure 存储过程名(参数列表)
stmt

函数例子:

delemiter $
create function test(emp_salary INT)
returns INT
READS SQL DATA
BEGIN
 RETURN(select count(*) from emp where salary > 5000 and salary=emp_salary);
END$
delemiter;

函数只能返回一个值,而要返回多个值可以编写多个函数多次调用,或者使用存储过程out。

存储过程例子:

delemiter $
CREATE PROCEDURE show_born_in_year(p_year INT)
BEGIN
    SELECT first_name,last_name,birth,death
    from president
    where YEAR(birth)=p_year
END$
delemiter;

过程不能用在表达式里,只能使用call语句调用.

存储过程的三种参数类型:in、out、inout,默认为in:

3、触发器

触发器是与特定表相关联的存储过程,其定义会在执行表的delete、insert、update语句时被自动激活。触发器属于表

语法:

create trigger trigger_name     #触发器名
[before|after]                  #触发时机
[insert|delete|update]          #激活触发器的语句
ON table_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;

猜你喜欢

转载自www.cnblogs.com/xiaolan-/p/12406016.html