数据库事务,索引和存储函数等内容讲解
树图思维导图提供 MySqul数据库索引脑图 在线思维导图免费制作,点击“编辑”按钮,可对 MySqul数据库索引脑图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:472973f596df66088de65b4b78c7cb4b
MySqul-04思维导图模板大纲
什么是索引
mysql索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度, 但同时却会降低更新表的速度,例如对表进行Insert,update,和delete因为更新白哦时,mysql不仅要保存数据,还要保存索引文件
索引分类
单列索引:一个索引只包含单个列
多列索引:也叫组合索引,在创建索引时所关联的字段不是一个字段,而是多个字段
普通索引:最基本的索引他没有任何限制
唯一索引:索引列的值必须唯一,但允许有空值, 如果是组合索引,则列值组合必须唯一
主键索引:一种特殊的唯一索引,不允许有控制,一般在建表同时创建主键索引
组合索引:就是将单列索引进行组合,在创建索引是所关联的字段不是一个字段,而是多个字段。
外键索引:只有innoDB引擎支持外键索引,用来保证数据的一致性,完整性,和实现级联操作
全文索引:快速匹配全部文档的方式
隐藏索引:mysql.8不可见索引,隐藏索引不会被优化器使用,但仍然需要进行维护
降序索引:8新特性,支支持btree降序索引
函数索引:8新特性,开始之初在索引中使用函数表达式的值
结构分类
B+Tree索引:mysql中使用的最频繁的一个索引数据结构,是innoDB和mylsam存储引擎默认的索引类型
Hash索引:MySQL中memory存储引擎默认支持的索引类型
查看索引:show index from 表名;
索引删除: drop index 索引名称 on 表名; alter table 表名 drop index 索引名称
磁盘存储
系统从磁盘读取到内存时是以磁盘块Block为基本单位的
位于同一个磁盘块中的数据会被一次性读取出来,而不是需要什么取什么
数据在磁盘文件物理存储,数据页之间时组成双向链表,数据页内部的数据行是单向链表,而且数据行是根据主键从小到大排序
索引的工作原理
在实际中常用的数据库引擎为InnoDB,而innodb采用的索引数据结构为B+tree,
索引的设计原则:
创建索引时的原则:
1:对查询次数多,且数据量比较大的表建立索引;
2:使用唯一索引,区分度越高,使用索引的效率越高
索引字段的选择,应当从where子句的条件中提取,如果where子句条件比较多,则应当挑选最常用的,过滤效果最好的组合条件
使用前缀索引(短索引,列内容越短越好),构成索引的字段长度比较段,拿在给定的存储块中就可以存储更多的索引值
索引数量要适当,不是越多越好,对于插入,更新,删除操作,比较多的表来说,索引过多,表维护索引的成本就会比较高,从而降低插入,更新,删除的效率
组合索引:最左匹配原则
最左优先,以最左边的为七点任何连续的索引都能匹配上,同时遇到范围查询(>,<,between,like)就会停止匹配。
事务概念
事务:将两个事件绑定为一个事件,要么都成功,要么都失败
官方:一条或多条SQL语句组成一个执行单元,这个单元里的sql语句操作,要么同时成功,要么同时失败, 单元中的每条SQL语句都相互依赖,形成一个整体,如果某条SQL语句执行失败或者出现错误,那么整个单元就会回滚,撤回到事务最初始的状态,如果单元格中的所有sql语句都能执行成功,则事务就顺利执行。
事务的语法
开始事务 执行sql语句:执行一个或多个sql语句 结束事务 提交:没出问题,顺利执行成功 回滚:出现问题,数据恢复到初始状态。
start transaction://开启事务 语句 rollback; commit;
管理事务演示
事务提交方式
事务的特征
原子性
atomicity: 原子性是至事务包含的所有操作要么全部成功,要么全部失败回滚, 因此事务的操作如果成功就必须要完全应用到数据库, 如果操作失败则不能对数据库有任何影响;
一致性
consisstency: 一致性,是指事务必须使数据库从一个一致性到另一个一致性状态, 也就是说一个事务执行之前和执行之后必须处于一致性状态 (事务执行之前的数据状态和事务执行之后的数据状态要保持一致)
拿转账来说,假设张三和李四两者的钱加起来一共是2000,那么不管张三和李四之间 如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是2000,这就是事 务的一致性。
隔离性
isolcation: 隔离性是当多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离
持久性
持久性: 持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就将是永久性的,即便是在数据库系统遇到故障情况下也不会丢失提交事务的操作
事务的隔离级别
事务的四种隔离级别
Read Uncommitted 名称:读未提交, 问题:脏读,不可重复读,幻读
Read Committed(Oracle默认隔离级别) 名称:读已提交, 问题:不可重复读,幻读
Repeatable Read(Mysql默认隔离级别) 名称:可重复读, 问题:幻读。
Serializable 名称:串行化, 无问题
数据库隔离级别操作
存储过程和存储函数概念
存储过程和存储函数是,事先经过编译并存储在数据库中的一段sql语句的集合
存储过程和存储函数的好处
存储过程和函数可以重复使用,减轻开发人员的工作量。类似于java中方法可以多次调用。 减少网络流量,存储过程和函数位于服务器上,调用的时候只需要传递名称和参数即可。 减少数据在数据库和应用服务器之间的传输,可以提高数据处理的效率。 将一些业务逻辑在数据库层面来实现,可以减少代码层面的业务处理。
存储过程和存储函数的区别
数据库存储过程是一组sql语句的集合, 他们可以被重复使用,并且可以接受参数, 存储过程 可以 没有返回值
存储函数是一种特殊的存储过程,他们可以返回一个值, 并且可以被其他SQL语句调用
存储过程语法
子主题 1
实例
存储函数