zoukankan      html  css  js  c++  java
  • MySQL 基础

    MySQL 基础

    几个常考的知识点

    什么是事务?
    • 事务是数据库并发控制的基本单位
    • 事务可以看作是一系列 SQL 语句的集合
    • 事务必须要么全部执行成功,要么全部执行失败(回滚)

    举个例子
    转账操作是事务使用的一个常见场景。

    Transaction 示例
    session.begin()
    try:
        item1 = session.query(Item).get(1)
        item2 = session.query(Item).get(2)
        item1.foo = 'bar'
        item2.bar = 'foo'
        session.commit()
    except:
        session.rollback()
        raise
    
    事务的 ACID 特性
    • 原子性(Atomicity):一个事务中所有操作全部完成或失败
    • 一致性(Consisitency):事务开始和结束之后数据完整性没有被破坏
    • 隔离性(Isolation):允许多个事务同时对数据库修改和读写
    • 持久性(Durability):事务结束后,修改是永久的不会丢失
    事务的并发控制

    如果不对事务进行并发控制,可能会产生四种异常情况

    • 幻读:一个事务第二次查出现第一次没有的结果
    • 非重复读:一个事务重复读两次得到不同结果
    • 脏读:一个事务读取到另一个事务没有提交的修改
    • 丢失修改:并发写入造成其中一些修改丢失
    四种事务隔离级别

    为了解决并发控制异常,定义了4种事务隔离级别

    • 读未提交:别的事务可以读取到未提交改变
    • 读已提交:只能读取已经提交的数据
    • 可重复读:同一个事务先后查询结果一样(Mysql InnoDB 默认实现可重复读级别)
    • 串行化:事务完全串行化的执行,隔离级别最高,执行效率最低
    如何解决高并发场景下的插入重复

    高并发场景下,写入数据库会有数据重复问题

    • 使用数据库的唯一索引
    • 使用队列异步写入
    • 使用 redis 等实现分布式锁
    乐观锁和悲观锁

    什么是乐观锁,什么是悲观锁

    • 悲观锁是先获取锁在进行操作。一锁二查三更新 select for update
    • 乐观锁先修改,更新的时候发现数据已经变了就回滚 check and set
    • 使需要根据相应速度、冲突频率、重试代价来判断使用哪一种

    乐观锁一般通过版本号或者时间戳实现

    InnoDB VS MyISAM

    两种引擎的区别

    • MyISAM 不支持事务, InnoDB 支持事务
    • MyISAM 不支持外键,InnoDB 支持外键
    • MyISAM 只支持表锁,InnoDB 支持行锁和表锁
  • 相关阅读:
    MongoDB入门下
    MongoDB简介
    MongoDB 查询上
    MongoDB 创建,更新,删除文档 下
    MongoDB 创建,更新,删除文档 上
    SqlServer 对 数据类型 text 的操作
    Asp.Net编码
    MongoDB 查询下
    (基于Java)编写编译器和解释器第3A章:基于Antlr构造词法分析器(连载)
    (基于Java)编写编译器和解释器第2章:框架I:编译器和解释器第三部分(连载)
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10845130.html
Copyright © 2011-2022 走看看