MySQL_高级部分
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL_高级部分相关的知识,希望对你有一定的参考价值。
事务
事务就是把一批SQL指令做为一个批次,要就一起执行所有SQL指令,只要有其中一个SQL指令出现问题,则所有的SQL指令都不执行。
在mysql 中,每一个SQL语句都是一个独立的事务,前一条指令与后一条指令没有任何关系。
事务有四大特性
ACID,原子性、一致性、隔离性、持久性
原子性:表示事务是一个不可分隔的基本单元,里面的SQL指认集是一个整体,要就一起执行,否则就都不执行。
一致性:事务执行前后,表中的数据要保持一致。
隔离性:事务相互独立,互不干涉,互不影响。
持久性:事务提交后,对表中的数据的影响是持久性的,永久性的,也叫永久性。
事务的类型
隐式事务,自动提交(默认),显示事务(用户自定义,需要显示的开始及显示的提交或回滚),
我们所做的事务属于类型为:显示事务。
操作步骤
1. 关闭事务的自动提交
2. 开始事务,设置事务的回滚点
3. 操作SQL指令
4. 提交或者回滚
5. 开启事务的自动提交
转账的示例:
set autocommit =0; -- 表示把自动提交关闭
start TRANSACTION; -- 开始事务
update bank set money = money+10000 where cardid = 220022;
update bank set money = money-10000 where cardid = 220011
-- 提交 commit;
rollback; -- 回滚
set autocommit = 1; -- 开启自动提交
索引
Index 索引就是在某一些列上加上一些有利于查询的标记,能提高查询的性能,但是有的索引反而会降低增删改的性能。关键字:index;
索引在创建在列上。而且这一列通常用作于查询的条件或排序字段。
创建索引需要注意
1. 数据量少的表不适合创建。
2.列中的值重复性比较大也不适合。
表中一旦加了索引,在查询表时,系统有一个优化机制,会自动采用最佳的方式来查询数据。
在MySQL中,索引分:主键索引、唯一索引、普通索引、全文索引
主键索引是唯一索引的一种特例,它能保证这一列中的值的唯一性。通常,我们创建主键,则系统会自动创建主键索引在这一列上。
部分索引的顺序会影响到数据行在表中的顺序。所心会导致增删改操作时性能方面的下降。
视图
View 视图的作用是隐藏一些比较敏感的数据,不同角色所看到的数据是不一样的,同时,视图本身是没有数据的,我们基于视图查询时,数据是来自于物理表。
视图里的代码只能是select语句,也就是说,视图只有查询效果。
但是可以基于视图对物理表进行增删改的操作,前提条件是视图的数据只能来自于一张表,而且会影响物理表中的数据。
存储过程
procedure 是一组预编译在数据库服务器端的处理业务的SQL代码。在应用程序中可以调用存储过程,执行SQL指令,调用的方式与Java中的方法调用类似。
优势
1. 安全性高 2.速度快 3.减少网络流量 4. 代码重用。
缺点:数据库不同,过程的代码也不同,所以,数据库如果更换,就比较麻烦。
调用过程:call 过程名[参数]
创建过程的语法:
无参的存储过程
DELIMITER $$ -- 标记过程创建的开始,作用避免系统对业务代码中的;的误解
create PROCEDURE sp_student()
begin
-- 业务代码在这里
select * from student;
end $$ -- 过程的结束
带参的存储过程
参数有三种:输入参数(in 默认)、输出参数(out)、输入输出参数(inout)
输入参数:需要把值传入到过程里面
-- 查询指定学期的课程信息(编号、课程名、课时、年级名称),如果没有输入则查询所有年级科目,否则只查询当前年级的科目信息
DELIMITER $$ create PROCEDURE sp_subjectByGradeName(in gn varchar(10) ) begin if(gn is null or gn = ‘‘) then -- if开始 select subjectNo,subjectName,classHour,gradeName from grade g inner join subject j on g.gradeid = j.gradeid; else select subjectNo,subjectName,classHour,gradeName from grade g inner join subject j on g.gradeid = j.gradeid where g.gradeName=gn; end if; -- if结束 end $$
输出参数:把过程里面的值传出,调用时就可以获取。参数前加:out
当一个过程中的参数又有输入参数,又有输出参数,建议把输出参数在前面,输入参数放在后面,方便于以后的调用。
输入输出参数:把值传入到过程中去,并在过程中又对参数进行赋值,此参数可以把过程中所赋的值传出来,在调用的位置可以获取到。参数前加: inout
stuId 参数传入了学号3,在过程中取得此学员的年龄并赋值给stuId参数,
调用后,在外部输入stuId参数的值,结果是 25.
以上是关于MySQL_高级部分的主要内容,如果未能解决你的问题,请参考以下文章
Vue3官网-高级指南(十七)响应式计算`computed`和侦听`watchEffect`(onTrackonTriggeronInvalidate副作用的刷新时机`watch` pre)(代码片段