KANG's BLOG

Let's have some fun

InnoDB的事务和崩溃恢复

1 事务提供的安全保证 1.1 ACID特性 为保证事务(transaction)是正确可靠的,数据库引擎必须具备的四个特性: 原子性(Atomicity) 事务内的一系列操作应该是否一个整体单元,不存在中间态,或者说中间态对外不可见。 一致性(Consistency) 在ACID理论中,一致性主要是指对数据有特定的预期状态,任何数据更改必须满足这些状态约束(或者恒等条件)。但是,一致性并不是数据库自身的特性,而是通过满足原子性和隔离性而达到的效果。 隔离性(Isolation) 指代并发事务相互执行相互隔离,互不影响。

InnoDB中的锁

一、锁的类型 Mysql可以按照粒度划分为表锁和行锁 表锁范围大,上锁慢,并发低 行锁仅锁索引,上锁慢,并发高 InnoDB的行锁是针对索引加的锁,不是针对记录加的锁。 而行锁又分为排他锁和共享锁 共享锁(S):允许获得该锁的事务读取数据行(读锁),同时允许其他事务获得该数据行上的共享锁,并且阻止其他事务获得数据行上的排他锁。 排他锁(X):允许获得该锁的事务更新或删除数据行(写锁),同时阻止其他事务取得该数据行上的共享锁和排他锁。 表锁和行锁同时存在就会带来一个问题,如果要申请表锁的时候如何确定当前表没有行锁呢?简单的方式当然是遍历查找,但这样效率太低,所以引入了“意向锁”(intention lock)。在添加行锁之前对表添加意向锁。

Mysql中char、varchar、text三种数据类型的区别

char、varchar、text区别 char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。 varchar可变长度,可以设置最大长度;适合用在长度可变的属性。 text不设置长度, 当不知道属性的最大长度时,适合用text。 按照查询速度: char(最快) > varchar(次之) > text(最慢)

Mysql主从同步方式

主从同步一致性保证分为三种策略: 1. 异步复制 主库提交事务后直接将结果返回给客户端,并不关心从库是否成功接收并处理。 2. 半同步复制 Mysql在5.5版本引入了半同步复制,主库在应答客户端提交的事务前要至少保证一个从库接受并写到relay log中 semi sync增加了rpl_semi_sync_master_wait_point参数,来控制半同步模式下主库在返回给会话事务成功之前提交事务的方式。rpl_semi_sync_master_wait_point该参数有两个值:

Mysql优化查询时对内存的利用

1. 服务层 Mysql查询时数据传输流程 获取一行,写到net_buffer。该内存大小由参数net_buffer_length定义,默认16k -- 查询net_buffer大小 show variables like 'net_buffer_length'; 继续获取行,直到写满net_buffer,发出去

Mysql执行计划详解

使用explain关键字查看执行计划 explain select * from table where table.id = 1 执行计划包含以下列: table | type | possible_keys | key | key_len | ref | rows | Extra

通过Binlog增量恢复数据

通过Binlog增量恢复数据 登录 MySQL,执行show variables like '%log_bin%';来查询 binlog 状态。 提示: log_bin => on 说明已经开始 binlog。

Mysql主键自增优点

Mysql主键自增 优点 不用担心主键重复 数字型占用空间小,尤其是二级索引,跟容易命中内存 提高内存命中率 顺序存放在磁盘上,减少页分裂,进而节省磁盘空间 由于b+树的结构,子叶节点为双向链表,所以范围查询非常快 缺点 手动插入ID复杂,容易主键冲突,新老系统并行时,新旧表之间难以双向同步 分表后,数据导入新表需要控制主键