1、 **mysql 事物的特性:**
1 原子性:就是所有操作都完成,如果有中止,则操作回到之 前状态
2 一致性:确保数据库状态改变之后,成功提交事务
3 隔离性:事务之间彼此独立 透明
4 持久性:确保提交的事务结果在出现故障的情况下仍然存在
2、 **紧接着上面 面试官会问到你【事务的隔离级别】**
1 读未提交:客户端a 修改数据,未提交,客户端b就可以读到数据,一旦a因为某种原因回滚,那所有操作都会被撤销,客户端b读的数据就是脏数据,也就是脏读
2 读已提交:客户端a修改数据,未提交,客户端b是查询不到a更新的数据的,解决了脏读问题。但是 当客户端a 事务提交了,客户端b执行上一步相同的查询,结果是与上一步不一致 即产生了 不可重复读现象
3 可重复读: 客户端b事务提交之前 查询数据,同时客户端a修改数据并提交,客户端b查询到的数据和第一次查询数据是一致的,没有出现不可重复读的现象
4 串行化
Mysql默认事务的隔离级别:可重复读 。 这时候检索条件命中索引的时候会默认锁住next\_key ,如果检索没有索引,更新数据时会锁住整张表。一个事务被加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读
没有绝对的 根据需求来设置隔离级别 如果对数据的完整性和一致性要求越高 那就选择更高的隔离级别。但是会影响并发性能
3、 **不出意外面试官会问你【mysql索引都有哪些】**
1 普通索引
2 唯一索引:索引的列的值必须唯一。允许有空值
3 主键索引:只有一个主键并且不能为空
4 联合索引:多个字段组合创建索引,注意 组合索引遵循最左原则
5 全文索引:fulltext 虽然会大大提高查询速度但是会降低更新表的速度
联合索引例子:创建了(a,b,c)这样的索引 那么 可以支持 a | a,b | a.b.c 。
b,c 这样子是不支持的。这就是最左原则
什么情况下建索引:
1 表的字段唯一 这时候可以建唯一索引
2 直接条件查询的字段 where a =
3 字段作为了其他表的外键
4 查询中排序、统计、分组 的字段
索引字段要在where里,where条件中or索引不会起作用
什么时候不建议用索引:
1 表的数据太少
2 经常插入、修改、删除的表
3 数据重复项很多的字段
4 经常和主字段一起查询,但是主字段索引值比较多的字段
Like “%aaaa%”不会用到索引 ;not in 也不会用到索引
4、Mysql索引结构
常见的MySQL主要有两种结构:Hash索引和B+ Tree索引,我们使用的是InnoDB引擎,默认的是B+树
![](https://img.kancloud.cn/df/b0/dfb047d3bf0d14b834d91e043b486a01_618x270.jpeg)
叶子节点:B树层次为0的页面,存储记录的所有内容。
非叶子节点:B树层次大于0的页面,只存储索引键和页面指针。
相同层次的页面是用一个双向链表连接起来的。
一般情况下,从树的最左边叶子节点开始,一直向右扫描,就能得到树的从小到的的所有数据。所以 页内的数据都是按索引键排序的、后右面的索引值不会小于他左侧兄弟的任何节点的值
MYSQL
MYSQL