MySql视图和存储程序

勇往直前 2020-03-04

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$delemitercall 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;

相关推荐