前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 基础

MySQL 基础

作者头像
希希里之海
发布2019-05-15 10:03:13
5080
发布2019-05-15 10:03:13
举报
文章被收录于专栏:weixuqin 的专栏weixuqin 的专栏

MySQL 基础

几个常考的知识点

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

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

Transaction 示例
代码语言:javascript
复制
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 支持行锁和表锁
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • MySQL 基础
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档