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 支持行锁和表锁
  • 相关阅读:
    hdu 3666 差分约束系统
    hdu 1198农田灌溉
    常微分方程(阿諾爾德) Page 45 相空間,相流,運動,相曲線 註記
    高等微積分(高木貞治) 1.4節 例2
    常微分方程(阿諾爾德) Page 45 相空間,相流,運動,相曲線 註記
    解析函數論 Page 29 命題(2) 函數模的有界性
    高等微積分(高木貞治) 1.4節 例2
    解析函數論 Page 29 命題(1) 有界閉集上的一致連續性
    解析函數論 Page 29 命題(3) 模的下界的可達性
    解析函數論 Page 29 命題(2) 函數模的有界性
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10845130.html
Copyright © 2011-2022 走看看