1、一张表,里面有ID自增主键,当insert了17条记录之后,删除了第15,16,17条记录,再把Mysql重启,再insert一条记录,这条记录的ID是18还是15
答案: 15 ,重启过之后,从之前的开始,如果没有重启,就是18
2、.MySQL中InnoDB引擎的行锁是通过加在什么上完成(或称实现)的:
A. 数据块
B. 索引值
- 答:索引值。innodb表数据是索引组织表形式存放
- 但是对索引页加锁,采用位图方式实现([color=red]如何实现[/color])
- 锁:提供共享资源的并发访问,保证数据的完整性、一致性
- sqlserver:2005前,页级锁;之后乐观并发,悲观并发。乐观并发支持行级锁
- 但和innodb实现方式不同,sql server下锁是稀有资源,某种情况下会升级为表锁
- innodb、oracle:提供一致性的非锁定读、行级锁(没有相关额外开销)
- 通过索引查询时,主键锁的是key,辅助索引锁的是范围
- 锁的两个概念:latch、lock
- latch:线程使用,轻量级锁,锁定内存数据结构
- 锁定时间必须很短。可再分为mutex(互斥锁)、rwlock(读写锁)。
- 目的是用来保证并发线程操作临界资源的正确性,
- 并且没有死锁检测,有mysql server保证
- lock:事务使用,锁定的对象:表、页、行。commit或rollback后释放
- 意向锁:表级别的锁,表示下一行被请求的锁类型
- locks rec but not gap:
- 表示锁住的是索引,而不是范围。
- 有死锁检测
- 有死锁检测