1.CHAR和VARCHAR有什么区别
(1)float和double的区别是什么
2.什么是数据库设计的三大范式
3.说一下索引的分类
1. 从物理结构上分
2. 从应用上划分
(1)说一下什么是索引
(2)索引的数据结构
(3)索引失效的几种情况
3.索引的优缺点
4.索引的数据结构?
5.Hash 和 B+ 树索引的区别?
Hash
B+ Tree
6.如何获取当前数据库版本
7.说一下ACID是什么
8.mysql的内连接、左连接、右连接有什么区别
9.说一下数据库的事务隔离
事务的隔离性
脏读:指在一个事务处理过程中读到了另一个未提交的事务中的数据。
不可重复读:指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据,这是 由于在查询间隔,被另外一个事务修改并提交了。
幻读:一个事务在前后两次查询同一个范围时,后一次查询看到了前一次查询没有看到的数据。
事务的隔离级别
Read uncommitted (读未提交):最低级别,以上问题均无法解决。
Read committed (读已提交):读已提交,可避免脏读情况发生。
Repeatable Read(可重复读):确保事务可以多次从一个字段中读取相同的值,在此事务持续 期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读,仍会出现幻读问题。 Serializable (串行化):最严格的事务隔离级别,要求所有事务被串行执行,不能并发执行,可 避免脏读、不可重复读、幻读情况的发生。
10.说一下mysql常用的引擎
1. InnoDB:提供了对数据库ACID事务的支持,提供了行级锁和外键的约束。他会在内存中建立缓冲 池,用于缓冲数据和索引。启动比较慢,不会保存表的行数,所以在查询行数的时候他需要扫描全 表得出行数。
2. MyISAM:mysql的默认引擎,不支持事务、行级锁和外键,支持表锁。因此插入和更新操作,需 要锁定这个表,效率会低一点。不过它保存了表的行数,所以在查询行数时不需要扫描全表。 3. 查询操作多且不需要事务支持的优先用MyISAM,写操作多的且需要事务支持的有限用InnoDB。
(1)说以下mysql的行锁和表锁
InnoDB支持表锁和行锁,且默认为行锁;而MyISAM只支持表锁。 表锁:开销小,加锁快,不会出现死锁。锁的粒度大,发生锁冲突的概率最高,并发量最低。 行锁:开销大,加锁慢,会出现死锁。锁的粒度小,发生锁冲突的概率小,并发度最高。
(2)说一下乐观锁和悲观锁
乐观锁:每次去拿数据的时候都认为别人不会修改,所以不会上锁,但在提交更新的时候会判断以下在 此期间别人有没有去更新这个数据。 悲观锁:每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿数 据就会阻止,直到这个锁被释放。