导图社区 Java面试题整理
Java面试题思维导图,如:事务的4大特性、事务的隔离级别、MySQL的常用引擎,有什么区别、lnnoDB为什么推荐使用自增ID作为主键索引、是什么,存储方式是什么,上限多少、索引的优缺点。
编辑于2022-02-22 21:12:04Java面试
MySQL
事务的4大特性
事务的特性(ACID) 原子性(Atomicity):事务中的所有操作要么全部成功,要么全部失败 一致性(Consistency):即事务执行前后都处于一致性状态,如A给B转账,转账之前金额总和为10000,转账之后总金额还应该是10000 隔离性(Isolation):事务成功提交之前,对于其他事务都是不可见的,即不允许将所有修改提供给其他事务 持久性(Durability):一旦事务成功提交,其结果将会永久保存在数据库中,即使数据库遇到故障
事务的隔离级别
read uncommited(未提交读):一个事务还未提交时,它的变更就能被其他事务看到,容易脏读、幻读、不可重复读 read commited(提交读):事务提交之后变更才可以被其他事务看到,易幻读、不可重复读 repeatable read(可重复读):当一个事务在执行过程中看到的数据,总是跟这个事务启动时看到的数据是一致的,当然未提交读变更对其他事务也是不可见的 serializable(序列化):每次读写都会加读锁和写锁,容易造成堵塞,并发低,使用较少 解释 脏读:读了别人未提交的数据,A在修改一条记录,但修改之后还未提交,此时修改后的值被B看到且B读到了修改后的值,但是A最终没有提交该事务,则B读到的就是一条脏数据 不可重复读:读了别人修改后的数据,A读到了数据,但是该事务还没有结束,另一条事务B修改了数据,A又一次读取数据,发现两次读取的数据不一致,这就是不可重复读 幻读:读了别人新增的数据,事务A对全表的数据进行了修改,事务B又新增了一条数据,此时事务A再读取发现有一条数据还未修改,就像发生了幻读一样
MySQL的常用引擎,有什么区别
MyISAM和InnoDB, 区别 InnoDB支持事务,MyISAM不支持,InnoDB将每一条SQL语句都封装成事务,自动提交,这样会影响速度,所以最好把多条SQL语句放在begin与commit之间,组成一个事务。 InnoDB支持外键,MyISAM不支持 InnoDB时聚簇索引,使用B+树作为索引结构,数据文件是和主键索引绑定在一起的,必须要有主键。MyISAM是非聚簇索引,也使用B+树作为索引结构,但是其索引和数据文件是分开的,索引保存数据文件的指针,主键索引和辅助索引是独立的。也就是说InnoDB的B+树主键索引的叶子节点就是数据文件,而辅助索引的叶子节点是主键的值,而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的指针 InnoDB不保存表的具体行数,而MyISAM用一个变量保存了整个表的行数,所以后者查询`count(*)`会很快 MyISAM可以被压缩后进行查询操作 InnoDB支持表、行(默认)级锁,而MyISAM仅支持表级锁 InnoDB表必须有唯一索引,如果没有主键会用一个隐藏列(Row_id)作为主键使用,而MyISAM可以没有 InnoDB的存储文件有frm表定义文件、ibd数据文件,而MyISAM是frm表定义文件、MYD数据文件、MYI索引文件
InnoDB为什么推荐使用自增ID作为主键
自增ID可以保证每次插入B+索引是从右边扩展的,可以避免B+树的频繁合并和分裂。如果使用字符串主键和随机主键,会使得数据随机插入,效率比较差。
索引是什么, 存储方式是什么, 上限多少
索引是帮助MySQL高效获取数据的数据结构。由于索引很大,不可能全部存储到内存中,往往以索引文件的形式存到磁盘上。索引太多也会影响性能,消耗内存,一般最多16个。
索引的优缺点
优点: 通过创建唯一性索引可以保证数据库中每一行数据的唯一性 可以大大加快数据的检索速度,这也是创建索引的最主要的原因 可以加速表于表之间的连接,特别是在实现数据的参考完整性方面特别有意义 在使用分组和排序子句进行数据检索是,同样可以显著减少查询中分组和排序的时间 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能 缺点: 创建索引和维护索引需要耗费时间,这时间随着数据量的增加而增加 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占据一定的物理空间,如果需要简历聚簇索引需要的空间会更大 当对表中的数据进行增加、删除、修改的时候,索引也要随之修改,需要动态的维护,这样就降低了数据的维护速度。
索引的类型
主键索引:设定主键后数据库会自动创建索引列,InnoDB为聚簇索引 单值索引:即一个索引只包含一个列,一个表可以有多个单值索引 唯一索引:索引列的值必须唯一,允许有空值 复合索引:即一个索引包含多个列,复合索引有效要满足最左匹配原则,就是当用到复合索引时,你的SQL查询语句条件必须用到最左边的那一个字段。
创建索引的注意事项
索引为什么默认使用B+树
什么情况下查询不走索引
MySQL的最左前缀原则
聚簇索引和非聚簇索引的区别
唯一索引比普通索引快吗
悲观锁与乐观锁以及在MySQL种如何实现
共享锁与排它锁
什么是间隙锁
char和varchar的区别
id自增的表插入10行数据, 删除8、9、10,重启后新插入一条数据,id为8还是11