MySQL面试:锁、表格、MyISAM和InnoDB区别详解

需积分: 0 1 下载量 14 浏览量 更新于2024-04-17 收藏 497KB PDF 举报
MySQL中有几种锁,包括表级锁、行级锁和页面锁。表级锁开销小,加锁快,不会出现死锁,但并发度较低;行级锁开销大,加锁慢,有可能出现死锁,但并发度高;页面锁介于表级锁和行级锁之间,加锁时间和开销也介于两者之间。 MySQL中不同的表格包括MyISAM、Heap、Merge、InnoDB和ISAM等五种类型。其中MyISAM不支持事务且支持表级锁,InnoDB支持ACID的事务、行级锁和外键约束,能够支持更高的并发性。 在MySQL数据库中,MyISAM和InnoDB有很多区别。MyISAM不支持事务、存储表的总行数、采用非聚集索引等;而InnoDB支持事务、行级锁和外键约束,存储引擎也是不同的。 MySQL中InnoDB支持的四种事务隔离级别名称分别为读未提交、读提交、可重复读和串行化。不同的隔离级别之间的区别在于对于读和写操作的锁定程度,逐级之间的区别在于读操作和写操作之间的隔离程度。 CHAR和VARCHAR的区别在于CHAR是固定长度的字符串类型,而VARCHAR是可变长度的字符串类型,CHAR存储效率高,但会浪费空间;VARCHAR存储效率低,但能够节省空间。 主键和候选键的区别在于主键是一个表中的唯一标识,不能重复,而候选键则是可以作为主键的备选项,可以有多个候选键。 myisamchk是用来修复MyISAM表格的工具,可以修复损坏的表格、恢复意外中断等问题。 MyISAM Static和MyISAM Dynamic的区别在于Static是静态索引,不会因数据的增加而变化,而Dynamic是动态索引,会根据数据的变化而动态调整索引。 如果一个表有一列定义为TIMESTAMP,那么这列会在插入数据时自动更新为当前时间戳。而如果列设置为AUTO_INCREMENT时,在表中达到最大值时会发生溢出,插入下一条数据时会从最小值重新开始。 要找出最后一次插入时分配了哪个自动增量,可以通过查询表中的自增量列并按照顺序排序,找出最大的值即为最后一次插入时分配的自动增量。