数据库部分

1.MySQL事务的四大特性(ACID)

原子性(Atomicity):事务被当作一个整体处理,对于数据库的操作要么全部执行,要么全部失败。如果事务在处理过程中发生异常,那么以后的操作就会回滚到操作前的状态,或者是上一个节点。

一致性(Consistency):事务开始和结束,数据不会被破坏,状态一致。

隔离性(Consistency):多个事务并发访问时,相互隔离。隔离性避免了事务交叉执行时,数据的不一致。事务的隔离级别有:未提交读,提交读,可重复读以及序列化。

持久性(Durability):数据一旦提交就会被永久写到数据库中。

2.事务的隔离级别

未提交读(READ-UNCOMMITTED):最低隔离级别,事务未提交时就可以被其他事物读取,容易出现脏读、不可重复读、幻读。

提交读(READ-COMMITTED):事务提交后才可以被其他事务所读取,容易出现不可重复读、幻读。

可重复度(REPEATABLE-READ):保证对于同一个数据,在事务开始前和结束后是一致的,禁止读未提交数据,容易出现幻读。

序列化(SERIALIZABLE):最高隔离级别,可避免出现脏读、不可重复读、幻读。

3.脏读、不可重复读、幻读?

脏读:在自己的事务里读到了其他事务未提交的数据;

不可重复读:对于同一条数据,两次连续查询之间并发执行一个修改事务,导致读取获得的数据不一致;

幻读:对于同一个表,两次连续查询之间并发执行一个新增或者删除事务,导致读取的数据库结果集不一致。

【不可重复读、幻读区别:不可重复读是同一条数据出现不一致,幻读是同一表结果集出现不一致;不可重复读多是并发了一个修改操作,幻读多是并发一个增加或者删除操作】

4.说一下 mysql 常用的引擎?

MyIAM:MySQL默认引擎,但不提供事务支持,外键,行级锁。当进行写操作时,会锁表导致效率较低;但是保存了表的行数,在执行select count(*)时,可以直接读取已经保存的值,而不需要全表查询。因此,如果不需要事务支持且读表操作远多于写表操作,推荐使用MyIAM。

InnoDb:提供事务支持、外键和行级锁,但是不保存行数,因此当进行 select count(*) from table 指令的时候,需要进行扫描全表。并且由于锁的粒度小,执行写操作时,不会锁全表,在并发度较高场景下还能提高效率。InnoDb适合于大容量数据库系统,并且支持自动灾难恢复。

5.说一下 mysql 的行锁和表锁?

MyIAM仅支持表锁,InnoDb则支持行锁和表锁,且默认是行锁。

行锁:开销大,加锁慢,容易发生死锁,锁粒度小,发生锁冲突概率小,并发量大。

表锁:开销小,加锁快,不发生死锁,锁粒度大,发生锁冲突概率最大,并发量小。

6.悲观锁和乐观锁?

乐观锁:在操作数据时,乐观锁持乐观态度,即认为别人不会同时修改数据,因此不上锁,只在更新的时候判断一下在此期间是否有人修改数据,如果有则放弃操作,否则执行。

悲观锁:在操作数据时,悲观锁持悲观态度,即认为别人会同时修改数据,因此会加锁,把数据锁住,直到其对数据的操作结束才解锁。在此期间其他事务不能对此数据进行操作。

7.数据库三范式?

第一范式(1NF):表的字段具有原子性,不可再分。

第二范式(2NF):在1NF基础上,对表设主键,使之具有唯一标识。

第三范式(3NF):在2NF基础上,保证表不冗余,即表中不包含其他表的非主关键字信息。

8.主键、外键?

主键(primary key):唯一,不可为空,不可重复;

外键(foreign key):可多个,可以为空,可以重复。

9.表连接方式?

内连接,左外连接,右外连接,笛卡尔积。

9.1  左外较内连接更高效?        Y,因为左外连接,左表是无脑显示,仅过滤右表数据;而内连接则需要过滤两表内容相匹配的数据,因此左外比内连接更高效。

10.数据库查询语句慢要如何优化?

其一,加索引;其二,尽量避免全表查询,简化查询字段;其三,减少表之间的关联;其四,选择正确的存储引擎。

11.什么样的字段适合建索引?

经常被查询,不经常修改,不为空且不重复

12.索引类型?

主键索引,唯一索引,非唯一索引,普通索引,聚集索引,非聚集索引,B-tree索引等。

13.union和unionall?

union:对于结果去重。

unionall:对于结果不去重,只是单纯将两个结果合并返回。但是效率要比union高。

14.常用的Oracle数据库函数?

聚合函数(Max,count,avg,sum),random,replace,to_char,NVL等。

15.Oracle分页与MySQL分页

Oracle:rownum;MySQL:limit

16.drop,delete,truncate?

drop:删除内容以及定义,释放表空间;

delete:删除内容,不删除定义,不释放表空间;

truncate:删除内容,不删除定义,释放表空间。

参考链接:

趣说数据库事务隔离级别与原理-51CTO.COM

Java最全面试题及答案整理(2022最新版) - 知乎

Java数据库10个经典的面试题及答案整理 _ 潘子夜个人博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值