1.varchar和char的区别?
varchar是变长字段,char是定长字段
2.varchar(10)和int(10)
varchar(10)代表了存储数据的最大长度
int(10)只是展示的长度,int(1)和int(10)所占空间相同
3.ACID
原子性:要么都成功,要么都失败
一致性:总量一致
隔离性:事务间互不影响
持久性:提交事务后数据永久改变不可逆
4.不考虑隔离级别会出现的读的问题
脏读:一个事务读取到了另一个未提交的事务
不可重复读:一个事务多次读同一数据,数据不同
幻读:一个事务读取到了另一个事务添加的数据(重点是添加)
5.隔离级别
6.存储过程是什么?(阿里不推荐使用存储过程,因为改变太快)
是一组预编译好的sql语句,提高代码的重用性,减少编译次数。
7.三大范式?
第一范式列不可再分
第二范式在第一范式的基础上非主属性完全依赖于主键
第三范式在第二范式的基础上非主属性间不相互依赖
8.myisam和innodb的区别?
innodb支持事务、外键,myisam不支持
innodb支持行锁,myisam只支持表锁
innodb不支持全文索引,myisam支持
myisam的表结构、数据、索引存在三个文件里,而innodb存在一起
9.主键使用自增id还是UUID?
自增id,因为b+树存储,自增id只需要不断向后排列,而UUID是随机的导致非常多的数据移动,造成插入性能下降。
10.索引的优缺点?
优点:提高数据检索效率,降低io成本
缺点:降低表的更新速度,不仅要保存数据,还要更新索引
索引以文件形式存在磁盘上,占空间
11.索引分为?
主键索引
单值索引,单列
唯一索引,可以为多次null
复合索引,多列
12.索引失效的原因?
- 以%开头的like模糊查询
- or连接
- is null is not null
- varchar类型不加单引号可能会变成int类型
- 在索引列上进行计算,函数,类型转换等操作
- 最左前缀法则,查询从索引的最左列开始,且不跳过索引中的列
- 减少使用select *
- 使用!= ,<>的时候无法使用索引导致全表扫描
13.b树和b+树的区别?
b+树的数据都存在叶子节点里,所有非叶子节点可容纳更多的关键字。整个树更加矮胖,树的高度决定了io的次数。
叶子节点按关键字的大小有序连接。
b+树可以遍历所有的叶子节点来获取所有数据(适合范围查询),而b树只能重复的中序遍历效率低