Mysql基础第六天

  • 事务(transaction):
    • 一个事务是一个完整的业务逻辑单元,不可再分
    • 只有dml语句和事务相关(delete insert update),因为这些语句都是和数据相关
    • 事物的存在是为了保证数据的完整性和安全性
    • commit是提交事务,rollback是回滚事务,两个都会让事务结束
    • 事务的四大特性:
      A:原子性,事务是最小的工作单元,不可再分
      C:一致性,事务必须保证多条DML语句同时成功或者同时失败
      I:隔离性,事务A与事务B之间具有隔离
      D:持久性,说的是最终是数据必须持久化到硬盘中,事务才算成功的结束
从A银行账户向B银行账户转账10000
update t_act set balance = balance - 10000 where actno = 'act-001';
update t_act set balance = balance + 10000 where actno = 'act-002';

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

  • 事务隔离性存在隔离级别,理论上隔离级别包括四个:

    • 第一级别:读未提交(read uncommitted)对方事务还未提交,我们当前事务可以读取到对方未提交的数据。存在脏读(dirty read)现象,表示读到了脏数据,不稳定的数据
    • 第二级别:读已提交(read committed)对方事务提交之后的数据我方可以读取到。存在不可重复读现象,但解决了脏读现象
    • 第三级别:可重复读(repeatable read)解决了不可重复读问题,但读取到的数据是幻象
    • 第四级别:序列化读/串行化读(serializable),解决了所有问题,但效率低,需要事务排队
  • mysql会自动提交dml,用start transaction;关闭自动提交

  • 索引:

    • 什么是索引,作用:
      索引就相当于一本书的目录,通过目录可以快速找到对应的资源,最根本的原理就是缩小了扫描范围
      在数据库方面,查询一张表的时候有两种索引方式:
      第一种防式:全表扫描
      第二种方式:根据索引检索(效率很高)
      索引虽然可以提高检索效率,但不能随意添加索引,因为索引也是数据库当中的对象,也需要数据库不断的维护,有维护成本。比如,表中的数据经常被修改就不适合添加索引,因为数据一旦被修改,索引需要重新排序,进行维护
      添加索引是给某一个字段,或者说某些字段添加索引
    • 怎么创建索引,怎么删除对象:
      create index 索引名 on 表名(字段名);
      drop index 索引名 on 表名(字段名);
    • 什么时候考虑给字段加索引:
      数据量庞大(根据客户的需求,根据线上的环境)
      该字段很少的dml操作(因为字段进行修改操作,索引也需要维护)
      该字段经常出现在where字句中,不添加索引时,sql会对where字句中的字段进行全表扫描,有索引则会根据索引扫描,快速定位(经常根据哪个字段查询)
    • 主键和具有unique约束的字段会自动添加索引,所以根据主键查询效率较高,尽量根据主键检索
    • 索引底层采用的数据结构是:B + Tree
    • 索引会自动排序,然后按首字母分区,然后是第二个字母分区,将数据分区后储存在BTree上,缩小了扫描范围,索引会携带数据在表中的物理地址,索引检索到数据后,通过物理地址定位表中的数据,效率最高
    • 索引分类:
      唯一索引:给单个字段添加索引
      复合索引:给多个字段联合添加索引
      主键索引:主键会自动添加索引
      唯一索引:有unique约束的字段会自动添加索引
      等…
    • 模糊查询第一个通配符使用百分号,索引会失效,进行全表扫描
  • 视图(view)

    • 站在不同的角度看数据
    • 创建和删除:
      create view myview as select 字段名 from 表名; 只有dql语句可以以视图对象的方式创建出来
      drop view myview;
    • 对视图进行增删改查会影响原表数据(通过视图影响原表数据)
    • 视图有什么用:
      视图可以隐藏表的实现细节,保密级别较高的系统,数据库只对外提供相关的视图,并不会提高效率
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值