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 //
以上为本次学习内容