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_高级部分的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript笔试题(js高级代码片段)

高级查询语句____ Mysql

Vue3官网-高级指南(十七)响应式计算`computed`和侦听`watchEffect`(onTrackonTriggeronInvalidate副作用的刷新时机`watch` pre)(代码片段

MySQL学习笔记_10_MySQL高级操作(下)

11:高级部分-MySQL

MySQL学习笔记_9_MySQL高级操作(上)