美文网首页
mysql知识点

mysql知识点

作者: visionarywind | 来源:发表于2019-12-22 15:59 被阅读0次

    mysql概览

    一些基本问题

    事务

    事务相关基本问题

    • 脏读
    • 丢失修改
    • 不可重复读
    • 幻读

    不可重复读 vs 幻读
    不可重复读偏向于修改数据导致两次读取不一致
    幻读重点在于新增/删除导致两次读取的结果集不一致

    乐观锁 vs 悲观锁

    乐观锁

    做乐观的假设,数据不会被并发修改,不上锁,在更新的时候判断是否被更新,通过mvcc或者cas实现,适用于多读的应用类型,可以提高吞吐量,数据库的write_condition机制是一种乐观锁

    乐观锁的问题

    • ABA问题
    • 激烈竞争时循环开销大

    事务隔离级别

    SQL标准级别

    • read-uncommitted
      允许读尚未提交的数据变更,可能导致脏读/不可重复读/幻读
    • read-committed
      允许读取并发事务已经提交的数据,有不可重复读/幻读问题
    • repeatable-read
      对同一字段多次读取结果是一致的,存在幻读问题
    • serializable
      最高隔离级别

    InnoDB

    事务隔离级别:默认repeatable-read,查看命令select @@tx_isolation

    InnoDB采用Next-Key Lock锁算法,避免幻读问题

    在分布式事务中,一般会使用serializable隔离级别

    InnoDB

    锁算法

    • Record lock: 行记录加锁
    • Gap lock: 间隙锁,锁定一个范围,不包括记录本身
    • Next-key lock: record lock + gap lock,锁定一个范围,包括本身
    • 行查询 使用next-key lock
    • next-key lock为了解决幻读问题
    • 查询的索引为唯一索引时,next-key lock -> record lock
    • gap lock设计目的是为了阻止多个事务将记录插入到同一范围内,从而导致幻读问题

    一些命令

    索引相关

    • 添加主键
      alter table 'table_name' add primary key ('column')
    • 添加唯一索引
      alter table 'table name' add unique('column')
    • 添加索引
      alter table 'table_name' add index index_name('column')
    • 添加全文索引
      alter table 'table_name' add fulltext('column')
    • 添加组合索引
      alter table 'table_name' add index index_name('column1', 'column2'...)

    Q&A

    Q: 存储引擎是表级还是数据库级?

    A: 表级别,create table 命令可以通过参数engine来指定存储引擎

    Q: MyISAM vs InnoDB区别

    A: MyISAM是mysql5.5之前版本的默认存储引擎,之后版本为InnoDB

    • MyISAM只有表级锁,InnoDB支持行级锁和表级锁
    • MyISAM强调性能,不提供事务支持,InnoDB提供事务、外键等数据库高级功能支持
    • MyISAM不支持外键,InnoDB支持
    • InnoDB支持mvcc

    相关文章

      网友评论

          本文标题:mysql知识点

          本文链接:https://www.haomeiwen.com/subject/lsyonctx.html