- 存储过程:
存储过程就像一个函数一样,它是一组可以完成某个特定功能的SQL语句集合,用户可以通过给定参数并指定存储过程来调用执行
因为SQL语句执行前需要编译,而存储过程就是编译完存在数据库当中,提供我们调用,加快执行效率
优点:提供了功能的灵活性,可以被多次调用,很方便,减少网络带宽流量,更加安全,因为可以对存储过程的权限限制,从而避免没有权限的人去访问数据
- 索引:
索引是可以帮助mysql高效获取数据的数据结构,可以实现高效的查找算法,提高查询速率
通常是B-TREE,还有哈希、R-TREE、full-text
B-TREE中我们比较常用的,有普通索引,unique,主键等
什么时候建立索引? 如果这个字段会频繁被查询使用,那么应该创建。如果经常更新数据,就不用了。很少出现在where子句中的字段不该创建索引
索引的坏处:本身消耗存储空间,同时对各项操作也增加负担,需要消耗资源去维护
- 事务:
事务是一个并发控制的基本单位。多条sql组成,这些操作要么执行,要么都不执行,不可分割的单位
ACID:原子性、一致性、隔离性、持久性(atomicity,consistency,isolation,durability)
A:不可分割,要么成功,要么失败,若失败,直接退回之前的状态
C:保证从一个一致状态转变到另一个一致状态,满足完整性约束
I:并发控制(锁),每个事务的操作对象相互分离,互相不可见,用锁去实现多个事务并发执行
D:事务一旦提交,结果是永久性的,宕机也能恢复数据
事务分为一下5类:
扁平事务; 常用的
带有保存点的扁平事务; 允许执行过程中回滚到较早的一个状态,回滚到任意保存点
链事务; 回滚时,只能恢复到最近一个保存点
嵌套事务; 事务里还有事务
分布式事务。 分布式环境运行扁平事务,例子:建行转账招行,保证数据ACIT
隔离级别:读未提交、读提交、可重复读、可串行(级别由低到高)
脏读:读到其他事务还没提交的数据
不可重复读:同一事务两次读同一数据,读出来内容不同
幻读:同一事务,同样操作读取两次,得到不同记录数
隔离级别越低,事务请求的锁越少或保持锁的时间就越短。
- 视图:
一个虚拟的表,可以对其增改查,使我们更容易获取数据,视图就是由select结果集组成的表
封装SQL查询,提升sql复用率,完成复杂的连接,对数据格式化,
存储过程和视图区别:相比之下存储过程范围更广,可以提供参数、输入参数 以及每次返回多个表数据 而视图一次只能返回一个二维表的数据 且不能接受 任何参数
悲观锁:对数据被外界修改持保守态度(悲观),在整个数据处理过程中,将数据处于锁定状态
乐观锁:它假设多用户并发的事务在处理数据时不会彼此互相影响,各事务能够在不产生锁的情况下处理各自影响的那部分数据。