事务、索引、视图

1)事务(Transaction)
1.1、什么是事务?
  一个事务是一个完整的业务逻辑单元,不可再分。
  eg:银行账户转账,从A账户向B账户转账1000,要执行两条update语句:

update t_act set balance=balance-1000 where actno='a';
update t_act set balance=balance-1000 where actno='b';

这两条语句必须同时成功,或者同时失败,不允许出现一条成功,一条失败
要想保证以上两条DML语句同时成功或同时失败,就需要使用数据库的“事务机制”

1.2、和事务相关的语句只有:DML语句(insert delete update)
  因为这三个语句都是和数据库当中的“数据”相关的
  事务的存在是为了保证数据的完整性、安全性

1.3、事务包括四大特性:ACID
  A:原子性:事务是最小的工作单元,不可再分
  B:一致性:事务必须保证多条DML语句同时成功或者同时失败
  I:隔离性:事务A与事务B之间具有隔离
  D:持久性:最终数据必须持久化到硬盘文件中,事务才算成功的结束

1.4、关于事务之间的隔离性
事务隔离性存在隔离级别,理论上隔离级别包括4个:
  第一级别:读未提交(read uncommitted)
   对方事务还没提交,我们当前事务可以读取到对方未提交的数据
   读未提交存在脏读(Dirty Read)现象:表示读到了脏的数据
  第二级别:读已提交(read committed)
   对方事务提交之后的数据我方可以读取到
   这种级别解决了脏读现象,但存在不可重复读现象
  第三级别:可重复读(repeatable read)
   这种隔离级别解决了:不可重复读问题
   但这种隔离级别存在的问题是:读取到的数据是幻象
  第四级别:序列化读/串行化读(serializable)
   解决了所有问题
   但效率低,需要事务排队

1.5、演示事务

  • MySQL事务默认情况下是自动提交的。
  • 使用start transcation可以关闭自动提交
  • rollback回滚到未提交的数据的位置
  • commit提交事务,结束当前事务

2)索引
2.1、什么是索引?有什么用?
  索引相当于一本书的目录,通过目录可以快速找到对应的数据
  在数据库中,查询一张表时有两种检索方式:
   方式一:全表扫描
   方式二:根据索引检索(效率高)
注意:
索引虽然可以提高检索效率,但不能随意添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护,有维护成本。比如:表中的数据经常被修改,这就不适合添加索引,因为数据一旦修改,索引需要重新排序,进行维护。

2.2、创建索引对象及删除索引对象
创建索引对象:

create index 索引名称 on 表名(字段名);

删除索引对象:

drop index 索引名称 on 表名;

2.3、什么时候给字段添加索引?

  • 数据量大。
  • 该字段很少DML操作。(因为字段进行修改操作,索引也需要维护)
  • 该字段经常出现在where字句中。(经常根据那个字段查询)

2.4、主键和unique约束的字段自动会添加索引。
 根据主键查询效率较高,尽量根据主键检索

2.5、索引的分类
  单一索引:给单个字段添加索引
  复合索引:给多个字段联合起来添加1个索引
  主键索引:主键上会自动添加添加索引
  唯一索引:有unique约束的字段上会自动添加索引

2.6、索引的实现原理
  通过B-tree缩少扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最的。在这里插入图片描述
2.7、索引失效
  模糊查询时,第一个通配符使用的是%,这时索引会失效


3)视图(view)
3.1、什么是视图
  站在不同的角度去看到数据。(同一张表的数据,通过不同的角度去看待)

3.2、创建视图及删除视图

create view 视图名 as select 语句   //将查询到的东西以一张视图来呈现
drop view 视图名  //删除视图

3.3、对视图进行增删改查,会影响到原表数据

3.4、视图的作用
  视图可以隐藏表的实现细节。保密级别较高的系统,数据库只对外提供相关的视图。程序员通过视图对象进行增删改查来修改原表数据。
注意
在实际开发,将视图的内容复制到一张新的表中,对表进行对数据修改,再三确认之后,再对视图内容修改,避免误改数据带来的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值