数据库基础(六) mysql八股文

2022-01-10 11:20:09 浏览数 (1)

基础

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,读写分离,主从同步,主从复制

就这两大类问题。

0 人点赞