基础
1,三范式:原子性,完全依赖,消除传递依赖。
2,引擎:InnoDB,MyIsam
3,超键,候选键,主键,外键
4,Sql约束:
- 主键约束:唯一性,非空
- 唯一约束:唯一性,有一个可为空
- 检查约束:对列的数据范围限定
- 默认约束:数据的默认值
- 外键约束:要建立两表关系并引用主键的列。
5,varchar和char
6,in和exist(不会草)
7,drop,delete,truncate的区别
drop删表,删结构
delete 删元组,但是会记入到日志中,可以回滚。
truncate 删除不能回滚,不删结构。
8,mysql查询过程
事务
1,ACID
2,事务隔离级别
3,什么是事务
4,什么是脏读,不可重复读,幻读
5,事务实现原理
6,redo log,undo log
7,binlog
8,事务中可以混合使用引擎吗
不可以,正常情况下没问题,但是如果需要回滚,innodb没问题,myisam就会无法撤销,出现数据不一致。
9,Mysql怎么实现事务隔离
10,什么是MVCC
11,MVCC实现原理
12,什么是自动提交
MySQL默认采用自动提交AUTOCOMMIT模式。也就是说,如果不是显式地开始一个事务,则每个查询都被当作一个事务执行提交操作。
13,Innodb和Myisam的区别
锁
1,为什么要加锁
2,按照粒度划分锁
3,乐观锁悲观锁,怎么实现
悲观锁就是加锁呗,可以java的,比如synchronized。也可以对数据,如for update。
乐观锁有CAS和版本号机制。
4,InnoDB的行锁怎么实现
给索引项加锁,所以使用行锁一定要使用索引。
5,什么是死锁,怎么解决
6,隔离级别和锁的关系
7,优化锁的意见
8,Select 。。。for update是表级锁还是行级锁
如果查询条件用了索引/主键,那么select ..... for update就会进行行锁。
如果是普通字段(没有索引/主键),那么select ..... for update就会进行锁表。
提交事务才会释放锁。
其他
1,为什么要使用分库分表
分表:数据太大
分库:并发太大
2,读写分离,主从同步,主从复制
就这两大类问题。