1、Lock 锁
XLock:排它锁,也叫写锁。
若事务T对数据加上X锁,则事务T可以对该数据进行读写操作,其他事务不能对该数据进行读写操作,也不能加锁,直到事务T释放锁。
SLock:共享锁,也叫读锁,
若事务T对数据加上S锁,则事务T可以对数据进行读操作,不能写。其他事务只可以对该数据加S锁,不能加X锁,直到事务T释放该锁。
X锁和S锁都是行锁,一行数据可以有多个S锁,但只能有一个X锁。
2、阻塞和死锁
一个事务中的锁需要等待另一个事务中的锁释放资源就叫做阻塞。
两个或多个事务在执行过程中,因为争夺锁资源而互相等待就叫做死锁
3、死锁解决办法
- 超时回滚,事务等待的时间超过设置的阈值就会自动回滚,其他的事务就可以正常执行了。
- wait-for graph (等待图),是一种主动的死锁检查方式,事务在请求锁并发生等待时会自动去检查是否存在回路,有则说明发生死锁,系统默认会回滚undo量最少的事务。
4、影响死锁概率的因数
- 系统中事务的数量,越多发生死锁的概率越高。
- 事务中操作的数量,操作的越多发生概率越高。
- 操作数据的集合,越小发生概率越高。
5、索引的有点
- 加快了查询表的速度。
- 建立唯一索引,保证了表中每一行数据的唯一性。
- 加快了表与表之间连接。
- 在使用分组和排序查询时,加速了查询时分组和排序的速度。
6、索引的缺点
- 索引需要占用物理空间。
- 在对数据进行增删改时同时也会动态的维护索引,增加了数据库的维护难度。
7、mysql中的几种索引
- 普通索引
- 唯一索引,索引列的值必须是唯一,可以为空值,组合索引时必须组合唯一。
- 主键索引,特殊的唯一索引,一个表只能有一个主键索引,不能为空。
- 组合索引,在多个字段上创建索引。
- 全文索引
8、聚簇索引和非聚簇索引
一般情况下,主键会创建聚簇索引,一张表只允许有一个聚簇索引。
聚簇索引是顺序结构与数据存储的物理结构一致的一种索引,并且一个表只能有一个聚簇索引。
非聚簇索引就是物理结构和逻辑结构没有关联,与数据存储的物理结构也没有关联,一张表可以有多个非聚簇索引。