mysql基础知识

mysql

  • 关系型数据库
  • 默认端口号:3306

存储引擎

  • 5.7 默认的存储引擎是InnoDB
    • 具有事务、回滚和崩溃修复能力的事务安全型表
    • 支持行级锁、表级锁
    • 支持外键
    • 支持MVCC
  • 5.5及以前默认的存储引擎是MyISAM
    • 不支持事物、行级锁
    • 崩溃后无法安全恢复
    • 性能极佳

索引

  • 哈希索引
    • 场景:绝大部分需求为单条记录查询
  • BTree索引
    • 适合大部分场景
    • b+树
      • MyISAM(非聚簇索引)
        • B+Tree叶节点的data域存放的是数据记录的地址
        • 索引文件和数据文件是分离的
      • InnoDB(聚簇索引)
        • 其数据文件本身就是索引文件(表数据文件本身就是主索引)
        • 辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方
        • 树的叶节点data域保存了完整的数据记录
        • 索引的key是数据表的主键
        • 在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,再走一遍主索引

事物

  • 事务是逻辑上的一组操作,要么都执行,要么都不执行。

  • 四大特性

    • 原子性(Atomicity): 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
    • 一致性(Consistency): 执行事务后,数据库从一个正确的状态变化到另一个正确的状态;
    • 隔离性(Isolation): 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
    • 持久性(Durability): 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。
  • 并发事物带来的问题

    • 脏读:一个事物读到了另一个事物修改前的数据
    • 丢失修改:两个事物同时对一个数据进行修改操作,其中一个事物的修改没有产生作用(被覆盖)
    • 不可重复读:一个事物重复(两次或多次)读取同一数据的期间数据被更改,导致两次读取的结果不一致。
    • 幻读:一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录

事物隔离级别

  • 读取未提交

    • 允许读取尚未提交的数据变更
    • 可能会导致:脏读、幻读、不可重复读
  • 读取已提交

    • 允许读取并发事务已经提交的数据
    • 可能会导致:幻读、不可重复读
  • 可重复读(**MySQL InnoDB 存储引擎的默认支持的隔离级别 **)

    • 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改

    • 可能会导致:幻读

  • 可串行化

    • 所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰

    • 可能导致:无

MySQL InnoDB :可重复读+Next-Key Lock 锁算法(避免幻读)

  • 表级锁: MySQL中锁定 粒度最大 的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁。其锁定粒度最大,触发锁冲突的概率最高,并发度最低,MyISAM和 InnoDB引擎都支持表级锁。
  • 行级锁: MySQL中锁定 粒度最小 的一种锁,只针对当前操作的行进行加锁。 行级锁能大大减少数据库操作的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。

innoDB锁算法

  • Record lock:

    • 单个行记录上的锁
  • Gap lock:

    • 间隙锁,锁定一个范围,不包括记录本身

    • 阻止多个事务将记录插入到同一范围内,而这会导致幻读问题的产生

  • Next-key lock:

    • record+gap
    • 锁定一个范围,包含记录本身
    • innodb对于行的查询时使用,为解决幻读
    • 当查询的索引含有唯一属性时,将next-key lock降级为record key
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值