MySql入门学习 DAY43(视图 事务 存储过程 )

MySql入门学习(数据库mysql)

DAY43

今日内容:

视图

事务

存储过程

 

视图

视图:本质是一张虚拟的表,根据SQL语句获取动态的数据集,并为其命名

作用:隐藏部分数据 开放指定数据

        视图可以将查询结果保存  可以用视图达到减少书写sql的次数

创建视图: CREATE VIEW 视图名称 AS SQL语句

特点: 每次对视图进行查询 都是再次执行了 AS 后面的查询语句 效率不高

         可以对视图进行修改  修改会同步到原表 但是不建议这么做

         视图是永久存储的  存储了sql语句 

使用视图: 

SELECT *FROM 视图名称   # 查看视图表的内容

UPDATE 视图名称 SET  字段=新值  # 更新视图中的数据

INSERT INTO 视图名称 VALUES (值1,值2...)  # 往视图中插入数据

修改视图:

ALTER VIEW 视图名称 AS SQL语句   # 修改视图中的SQL语句

删除视图:

DROP VIEW 视图名称

事务

事务:用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,

从而保证数据库数据完整性

事务的特性:

1. 原子性 : 事务是一个整体 不可分割

2. 隔离性 : 事务之间要相互隔离 为了维护数据完整性

在并发访问数据库时 会有一些问题:

脏读: 读取了为被提交的数据

幻读:  一个查询事务没有结束时 另一个事务插入或删除了数据

不可重复读 : 一个事物在查询 另一个事务在 更新数据

因此有四种隔离级别

读未提交

读已提交

可重复读 (默认级别)

串行化

3. 一致性: 当事务执行后 所有的数据都是完整的

4.持久性: 一旦事务提交 数据就永久保存

存储过程

存储过程:包含了一系列可执行的sql语句,存储过程存放于MySQL中

通过调用它的名字可以执行其内部的一堆sql

作用: 可以将的程序业务逻辑 放到mysql中来处理 ,降低网络访问次数 从而提高程序效率

优点: 实现程序与sql解耦   基于网络传输,传别名的数据量小,而直接传sql数据量大

缺点: 扩展功能不方便  沟通成本增高

三种开发模型: 

方式一:MySQL:存储过程    程序:调用存储过程

方式二:MySQL    程序:纯SQL语句

方式三:MySQL    程序:类和对象,即ORM(本质还是纯SQL语句)

语法:  

create procedure 过程名称 ( {in,out,inout}  数据类型  参数名称)

begin

sql代码

end

参数前面需要指定参数的作用

in 仅用于传入参数用

out 仅用于返回值用

inout 既可以传入又可以当作返回值

案例 : 创建一个存储过程 作用是将两个整数相加

由于 mysql默认结束符就是分号  而存储过程也是用分号来表示结束 

那么这时 mysql就分不清 到底哪个分号才一行结束

方案:更换 结束符(delimiter + 结束符;)

delimiter //      #   先修改结束符 在执行下面的语句
create procedure add_p (in a int ,in b int ,out c int)
begin 
    set  c= a + b ;
end //

delimiter ;   #   再将结束符修改回来

调用 :  
call add_p(1,2)

 案例:创建一个存储过程 作用是将两个整数相加 将结果保存在变量中

定义一个变量  定义的变量在断开连接后被释放
set @su = 100;
create procedure add_p2 (in a int,in b int,out su int)
begin
    set su = a + b;
end
//
调用
call add_p2(10,20,@su);

mysql中的if语句

if 条件 then
代码
elseif 条件 then
代码
else then
代码
end if;

案例: 使用存储过程 完成  输入 一个 数字 1或2   显示 壹 或 贰

create procedure show_p (in a int)
begin
if a = 1 then
	select "壹";
elseif a = 2 then
	select "贰";
else
	select "other";
end if;
end //

以上为本次学习内容

猜你喜欢

转载自blog.csdn.net/sql121407/article/details/82762266