2021-05-10 第二阶段day27

day27

  • 一、视图
    • 1、创建视图
      • (1)单表视图
      • (2)多表视图
    • 2、查看现有视图
    • 3、删除视图
    • 4、修改视图
  • 二、函数
    • 1、函数创建
    • 2、无参数的函数调用
    • 3、含有参数的函数调用
    • 4、设置变量
      • (1)定义局部变量
      • (2)定义用户变量
  • 三、存储过程
    • 1、存储过程的创建
    • 2、无参数存储过程创建和调用
    • 3、有参数的存储过程
  • 四、函数与存储过程
    • 1、查看存储过程和函数的定义
    • 2、查看所有函数或者存储过程
    • 3、删除存储过程或存储函数
  • 五、事务

一、视图

  1. 只有表结构,数据还是原数据表中的数据。
  2. 所以视图表的增删改查与一般表操作相同
  3. 对于不符合视图规则的数据,视图里没有,原数据表中有。

1、创建视图

语法:

CREATE [OR REPLACE] VIEW [view_name] AS [SELECT_STATEMENT];

(1)单表视图

eg:

create view good_student_view as
select name,age,score from class where score>=80;

(2)多表视图

eg:

-- 如果视图是针对多张表创建,不要进行写操作.
create view student_hobby_view as 
select class.name,score,hobby,price
from class left join hobby
on class.name = hobby.name;

2、查看现有视图

语法:

show full tables in 数据库名 where table_type like ‘VIEW’;

3、删除视图

语法:

drop view [if exists] 视图名;

4、修改视图

eg:

alter view good_student_view as 
select name,age,score from class where score>=85;

二、函数

1、函数创建

语法:

delimiter 自定义符号
create function 函数名(形参列表) returns 返回类型
begin
函数体 – 若干sql语句,但是不要直接写查询
return val;
end 自定义符号
delimiter ;

其中,delimiter是为了在函数内些语句方便,制定除了;之外的符号作为函数书写结束标志,一般用$$或者//

2、无参数的函数调用

eg:

delimiter $$
create function st() returns int
begin
return (select score from class order by score desc limit 1);
end $$
delimiter ;
select st();

3、含有参数的函数调用

eg:

delimiter $$
create function queryNameById(uid int)
returns varchar(20)
begin
return (select name from class where id=uid); end $$
delimiter ;
select queryNameById(1);

4、设置变量

(1)定义局部变量

在函数内部设置 declare [变量名] [变量类型]; 局部变量可以使用set赋值或者使用into关键字。
eg:

-- 获取最高分与最低分之差
create function st2() returns int
begin
declare num_1 int;
declare num_2 int;
set num_1 = (select score from class order by score desc limit 1); -- set方法
select score from class order by score limit 1 into num_2; -- into方法
return num_1 - num_2;
end $$

(2)定义用户变量

set @[变量名] = 值;使用时用@[变量名]。
eg:(存储过程)

set @a=1;
create procedure p_inout(inout num int)
begin
select num;      --> 1
set num=100;
select num;      --> 100
end $$
call p_inout(@a);

三、存储过程

1、存储过程的创建

(无返回值的函数)
语法:

delimiter 自定义符号
create procedure 存储过程名(形参列表)
begin
存储过程 – sql语句构成存储过程语句集
end 自定义符号
delimiter ;

2、无参数存储过程创建和调用

eg:

delimiter $$
create procedure st() begin
    select name,age from class;
    select name,score from class order by score desc;
end $$
delimiter ;
call st();

3、有参数的存储过程

  • IN 类型参数可以接收变量也可以接收常量,传入的参数在存储过程内部使用即可,但是在存储过程内部的 修改无法传递到外部。
  • OUT 类型参数只能接收一个变量,接收的变量不能够在存储过程内部使用(内部为NULL),但是可以在 存储过程内对这个变量进行修改。因为定义的变量是全局的,所以外部可以获取这个修改后的值。
  • INOUT类型参数同样只能接收一个变量,但是这个变量可以在存储过程内部使用。在存储过程内部的修改 也会传递到外部。

eg:

-- in out inout的对比
create procedure p_in(in num int)
begin
select num;         --> 1
set num=100;
select num;         --> 100
end $$
call p_in(1);

set @a = 1;
create procedure p_out(out num int)
begin
select num;        --> NULL
set num=100;
select num;         --> 100
end $$
call p_out(@a);

set @a=1;
create procedure p_inout(inout num int)
begin
select num;      --> 1
set num=100;
select num;      --> 100
end $$
call p_inout(@a);

四、函数与存储过程

1、查看存储过程和函数的定义

语法:

show create {procedure|function} 存储过程或存储函数的名称

2、查看所有函数或者存储过程

语法:

select 属性1,属性2 from mysql.proc where db=‘数据库名’;

3、删除存储过程或存储函数

语法:

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

五、事务

确保数据操作过程中的数据完整和使用安全。
过程:

1、开启事务:begin;
2、执行各种sql命令。(适用于写和删)
3、终止任务:
commit; – 提交
rollback; – 回滚到begin之前的状态(只对于数据有效,表和库没用)

事务的四大特性:

  1. 原子性:一个事务必须视为一个不可分割的最小工作单元,要么全部提交成功,要么全部失败回滚。
  2. 一致性:事务完成时,数据必须处于一致状态,数据的完整性约束没有被破坏。
  3. 隔离型:允许多个并发事务同时对其数据进行读写和修改,但多个事务相互独立。
  4. 持久性:一旦事务提交,则其所做的修改就会永久保存到数据库中。

你可能感兴趣的:(mysql)