数据库进阶

MyISAM InnoDB区别
1.前者不支持事务,后者支持事务
2.前者支持表级锁,后者支持行级锁
3.前者存储表的总行数,后者不存储
4.前者采用非聚集索引,B+树的叶子结点存储数据文件的地址,后者,叶子结点存储数据

MyISAM 适用于频繁查询,大量的select ,InnoDB可靠性安全性比较高,适合表更新的频繁,大量的insert update;

事务
innoDB存储引擎 会提供一组用来记录事务的文件
每一条DML操作 都会记录到这个文件 中,我们可以 提交这个事务,或者回滚事务

提交事务commit 清空这个文件,将数据全部持久化到数据表中。将所有的DML操作提交 命令:commit;
回滚事务rollback,这个文件的所有操作撤销并清空,回滚只能回滚到上一次的提交点,mysql是默认自动提交的,关闭自动提交 是开启事务,start transaction

四个特性
a原子性: 事务是最小的工作单元,所有操作要么全部成功,要么全部失败回,不可在分割。
c一致性:数据库的完整性约束没有被破坏。比如A向B转账,不可能A扣了钱,B却没收到。
i隔离性:事务A和事务B具有一定隔离。四个隔离级别
d持久性:事务最终结束的一个屏障,把没有加载到硬盘上的数据保存到硬盘上

事务的隔离级别
从低到高
未提交读:事务中发生了修改,即使没有提交,其他事务也是可见的,比如对于一个数A原来50修改为100,但是我还没有提交修改,另一个事务看到这个修改,而这个时候原事务发生了回滚,这时候A还是50,但是另一个事务看到的A是100.可能会导致脏读
提交读:对于一个事务从开始直到提交之前,所做的任何修改是其他事务不可见的,举例就是对于一个数A原来是50,然后提交修改成100,这个时候另一个事务在A提交修改之前,读取的A是50,刚读取完,A就被修改成100,这个时候另一个事务再进行读取发现A就突然变成100了;可以阻止脏读,但是幻读或不可重复读仍有可能发生
重复读:就是对一个记录读取多次的记录是相同的,比如对于一个数A读取的话一直是A,前后两次读取的A是一致的;可以阻止脏读和不可重复读,但幻读仍有可能发生
幻读,只要事务不结束,读到的数据还是原先那样

串行化,事务排队,不能并发,你操作的时候我不能操作,不会发生脏读和幻读;该级别可以防止脏读、不可重复读以及幻读

索引
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

索引失效:

  1. 模糊查找 %开头的
  2. or 两边有一侧是没有添加索引的
  3. 使用复合索引时,没有用左侧的列查找,索引失效
  4. 索引参加了位运算和使用函数 也会失效
    索引分类:
    单一索引:一个字段上加索引
    复合索引:多个字段上加索引
    主键索引:主键上加索引
    唯一索引:具有unique约束的字段添加索引

视图
创建视图:

create view dept2_view as select * from dept

视图是一张虚拟的表,通常是一张表或多张表的一个子集,修改视图,表中所对应的部分也同时修改;
在这里插入图片描述
简单来说,就是将频繁使用但长度长且复杂的sql语句, 以视图的方式创建,需要修改的时候,直接对视图对象进行操作即可,大大提升开发效率

数据库三范式
第一范式:首先有主键,所有的字段不可再分
在这里插入图片描述
第二范式:
非主键字段,要完全依赖主键,不能部分依赖(下图的复合索引)
在这里插入图片描述
三张表来表示多对多的关系
在这里插入图片描述
第三范式
在第二范式的基础上,非主键字段直接依赖主键,不能产生传递依赖,非主键字段不能相互依赖

在这里插入图片描述
一对多的关系
两张表
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值