数据库面试题DBS DBMS DB区别DBS 数据库系统DBMS 数据库管理系统DB 数据库数据库系统dbs包括但不限于数据库管理系统dbms和数据库dbMySQL存储引擎InnoDB(默认):支持事物,表锁,行锁设计,支持外键MyISAM:不支持事物和表锁设计,不支持外键事物使用场景转账:a转账给b,a账户减少b账户增加过程就要用到事物,转账事物就回滚解释:一组原子性的SQL查询(结合ACID)ACID特性A:原子性C:一致性I:隔离性D:持久性隔离级别(低到高)read uncommitted(未提交读)read committed(提交读):大多数数据库默认的级别repeatable read (可重复读):mysql默认级别,解决了脏读问题,InnoDB通过mvcc可解决幻读问题serializable(可串行化):最高的隔离级别,不能并发,解决了幻读问题,会产生超时 锁争用问题乐观锁与悲观锁悲观锁特征(what):每次操作数据都会加锁常见例子:mysql中行锁 表锁 读锁 写锁 ;java的中重量级锁synchronized乐观锁特征(what):操作数据时不加锁实现方法(how):通过版本控制和cas算法实现优点:适用于多读的应用类型,可以提高吞吐量常见例子:java中的原子变量类(cas算法)MVCC多版本并发控制是啥(what):可以认为是行级锁的变种,他在很多情况下避免加锁,花销更低分类:乐观并发控制和悲观并发控制实现(mysal的innodb引擎):通过在每行记录后面保存两个隐藏的列来实现,一个是保存行的创建时间,一个是保存行的过期时间。不过这里的时间指的是系统版本号死锁(数据库的)解释现象:两个或两个以上事务在同一资源相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。并发控制解决问题:我在读数据,你在删数据的情况锁分类:读锁:共享锁,不阻塞写锁:排他锁,排除其他写锁和读锁。锁策略解决问题:提高性能分类:表锁:开销最小 行级锁:最大程度支持并发,但开销最大范式分类1nf:属性具有原子性2nf:在1nf基础上消除非主属性对主码的部分依赖3nf:在2nf基础上消除传递依赖范式与反范式范式:优点:更新比反范式快修改数据少表比较小,存在内存中,执行快缺点:需要关联反范式:优点:避免关联缺点:信息冗余Char varcharChar是定长 剩余空间会用空格填充Varchar是可变长MySQL date、datetime和timestamp类型的区别https://zhuanlan.zhihu.com/p/…索引(书的目录)解决问题(why):方便查找数据优点:大大减少服务器需要扫描的数据量帮助服务器避免排序和临时表将随机io变成顺序io缺点:时间:创建索引,维护索引需要时间空间:创建索引占用物理空间创建索引的原则最左前缀匹配原则,具体在联合索引体现,mysql会一直向右匹配,当遇到范围查询会停止,此时把范围查询的索引放到最后即可经常作为查询的字段作为索引更新频繁的字段不适合做索引定义有外键的字段一定要做索引尽量扩展索引,不要重新新建索引索引分类按底层数据结构分:b数索引(底层是b+数)哈希索引空间数据(r-tree)索引全文索引按逻辑分类主键索引(特殊的唯一索引,不允许null值)单列索引多列索引唯一索引空间索引Group by后面接条件时用having;一般与cout()函数一起使用,实现查询重复数据功能查重:结果分页查询(limit(mysql) top(sqlserver))练习:https://www.nowcoder.com/prac…解释:limit x, y 表示从x+1行(x从0开始算)开始查询y条数据公众号欢迎关注公众号 布尔bl ,分享Java相关信息技术、生活感悟。