导图社区 Mysql
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一
社区模板帮助中心,点此进入>>
英文雅思大作文的命题类型和写作框架总结!
G类小作文书信写法
六级高频单词
英语学习:P的逻辑
英语学习p字母相关的单词
医学相关的英语词汇
系动词be的语法
48个国际音标标准学习
topic
雅思听力临考前策略
Mysql
事务
原子性
要么全部执行,要么全部不执行
一致性
事务执行前后,数据保持一致
隔离性
并发访问数据库时i,不被其他事务干扰
持久性
事务提交之后,对数据库改变是持久的
并发问题
脏读
一个事务读取到另一个事务尚未提交的数据
幻读
一个事务中两次读取的数据的内容不一致
不可重复度
一个事务中两次读取的数据量不一致
不可重复读侧重于修改,幻读侧重于新增或删除。 解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
隔离级别
读未提交
不需要加共享锁
读已提交
读操作需要加共享锁,但是在语句执行完以后释放共享锁(读锁)
可重复读(默认)
读操作需要加共享锁,等待事务执行完毕以后才释放共享锁
可串行化
该级别锁定整个范围的键,并一直持有锁,直到事务完成
解决并发问题
MVCC技术(多版本并发控制)
做到读写互相不阻塞,主要用于解决不可重复读和幻读问题时提高并发效率
通过数据行的多个版本管理来实现数据库的并发控制,简单来说就是保存数据的历史版本
锁
按粒度分
行锁
针对当前操作的行进行加锁
优点:粒度最小,发生锁冲突的概率最低,并发度也最高
缺点:开销大,速度慢,会出现死锁
表锁
对当前操作的整张表加锁
优点:实现简单,资源消耗较少,速度快
缺点:粒度最大,冲突多
页锁
一次锁定相邻的一组记录
介于两种之间
按性质分
共享锁(读、S锁)
用于所有的只读数据操作
允许多个并发事务对同一资源加锁,但加 S 锁的同时不允许加 X 锁,不能被修改。
S 锁通常读取结束后立即释放,无需等待事务结束
排他锁(写/X锁)
表示对数据进行写操作
X 锁仅允许一个事务对同一资源加锁,且直到事务结束才释放
使用 select * from table_name for update; 语句产生 X 锁
更新锁(U锁)
预定要对资源施加 X 锁
允许其他事务读,但不允许再施加 U 锁或 X 锁
U 锁一直到事务结束时才能被释放。故 U 锁用来避免使用共享锁造成的死锁现象
按主观上分
乐观锁
主观上认定资源是不会被修改的,所以不加锁读取数据,仅当更新时用版本号机制等确认资源是否被修改
适用于多读的应用类型,可以系统提高吞吐量
悲观锁
具有强烈的独占和排它特性,每次读取数据时都会认为会被其它事务修改,所以每次操作都需要加上锁
主从复制
概念
建立一个与主数据库完全一样的数据库环境,即从数据库
作用
读写分离,使数据库能支撑更大的并发
高可用,做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失
实现原理
把主数据库的 binlog 二进制文件中的 SQL 语句复制到从数据库,让其在从数据的 relaylog 中继文件中再执行一次这些 SQL 语句即可
复制方式
异步复制(默认)
Master 根本不考虑数据是否达到了 Slave,或 Slave 是否成功执行
半同步复制
Master 节点只要确认至少有一个 Slave 接受到了事务
问题
主库宕机后,数据可能丢失
半同步复制:确保事务提交后 binlog 至少传输到一个从库 ,解决数据丢失的问题
优化
Explain命令
查询结果参数
id
select_type(查询类型
type 表示查询数据的方式。
possible_keys
Extra
策略
避免用*查询避免使用in,not in,or,对null值判断
主从复制,读写分离
多用索引,避免全表扫描
开启慢查询日志
日志
重做日志(redo log)
回滚日志(undo log)
二进制日志(binlog)
错误日志(errorlog)
普通查询日志(general query log)
慢查询日志(slow query log)
中继日志(relay log)