2020面试-数据库篇

本文深入解析数据库事务的ACID特性,探讨四种隔离级别及其影响,同时讲解数据库范式,以及DML、DDL、DCL的作用。此外,文章详细介绍了Redis作为NoSQL解决方案在JavaWeb开发中的应用,包括其在大数据量处理、高性能读写及事务支持方面的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

==数据库事务(简称:事务)==是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

ACID

事务的原子性(atomic) 是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了

事务的一致性(consistency) 是指事务的运行并不改变数据库中数据的一致性.
数据库的状态满足所有的完整性约束,就说该数据库是一致的。

       例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改变.

事务的隔离性(isolation) 是指并发的事务是相互隔离的。
两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致.

事务的持久性(durability)是指事务运行成功以后,就系统的更新是永久的.

数据库四个隔离级别

1、Serializable (串行化):最严格的级别,在读的每一行数据上都加上锁。事务串行执行,资源消耗最大;

2、REPEATABLE READ (重复读) :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但不能避免“幻读”,但是带来了更多的性能损失。

3、READ COMMITTED (提交读) :大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”,但不能避免“幻读”和“不可重复读取”。该级别适用于大多数系统。

4、Read Uncommitted (未提交读) :事务中的修改,即使没有提交,其他事务也可以看得到,会导致“脏读”、“幻读”和“不可重复读取”。

三个范式
首先要明确的是:满足着第三范式,那么就一定满足第二范式、满足着第二范式就一定满足第一范式

第一范式:字段是最小的的单元不可再分

学生信息组成学生信息表,有年龄、性别、学号等信息组成。这些字段都不可再分,所以它是满足第一范式的

第二范式:满足第一范式,表中的字段必须完全依赖于全部主键而非部分主键。

其他字段组成的这行记录和主键表示的是同一个东西,而主键是唯一的,它们只需要依赖于主键,也就成了唯一的
学号为1024的同学,姓名为Java3y,年龄是22岁。姓名和年龄字段都依赖着学号主键。

第三范式:满足第二范式,非主键外的所有字段必须互不依赖

就是数据只在一个地方存储,不重复出现在多张表中,可以认为就是消除传递依赖
比如,我们大学分了很多系(中文系、英语系、计算机系……),这个系别管理表信息有以下字段组成:系编号,系主任,系简介,系架构。那我们能不能在学生信息表添加系编号,系主任,系简介,系架构字段呢?不行的,因为这样就冗余了,非主键外的字段形成了依赖关系(依赖到学生信息表了)!正确的做法是:学生表就只能增加一个系编号字段。

参考博客

DML(data manipulation language):
它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言
DDL(data definition language):
DDL比DML要多,主要的命令有CREATE、ALTER、DROP等,DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用
DCL(Data Control Language):
是数据库控制功能。是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL

视图

视图是一种基于数据表的一种虚表

(1)视图是一种虚表
(2)视图建立在已有表的基础上, 视图赖以建立的这些表称为基表
(3)向视图提供数据内容的语句为 SELECT 语句 ,可以将视图理解为存储起来的 SELECT 语句
(4)视图向用户提供基表数据的另一种表现形式
(5)视图没有存储真正的数据 ,真正的数据还是存储在基表中
(6)程序员虽然操作的是视图,但最终视图还会转成操作基表
(7)=一个基表可以有0个或多个视图

视图可以将查询出来的数据进行封装

数据库索引

参考博客

Redis

Java Web开发中,用数据库来进行数据的存储,涉及大数据量的需求(如商品抢购),或系统在极短的时间内完成成千上万次的读/写操作,这个时候往往不是数据库能够承受的,极其容易造成数据库系统瘫痪,最终导致服务宕机的严重生产问题。

克服以上问题Java Web采用NoSQL技术基于内存的数据库

Redis是NoSQL中的一种,性能优越,支持每秒十几万次读/写操作,性能远超数据库,还支持**集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的 数据存储在内存 中,更让人欣慰的是它还支持一定的 事务能力,这保证了高并发的场景下数据的 安全和一致性

应用场景

存储 缓存 用的数据;
需要高速读/写的场合使用它快速读/写;

日常中对数据的读操作>写操作
一般我们只是使用 Redis 存储一些常用和主要的数据,比如用户登录的信息等。

Redis作为缓存的读逻辑
在这里插入图片描述
从上图我们可以知道以下两点:

第一次读取数据的时候,读取 Redis 的数据就会失败,此时就会触发程序读取数据库,把数据读取出来,并且写入 Redis 中;
第二次以及以后需要读取数据时,就会直接读取 Redis,读到数据后就结束了流程,这样速度就大大提高了。
写操作流程
在这里插入图片描述
所以读操作大于写操作时用Redis

Redis面试题
Redis面试题2

内容概要:本文详细介绍了QY20B型汽车起重机液压系统的设计过程,涵盖其背景、发展史、主要运动机构及其液压回路设计。文章首先概述了汽车起重机的分类和发展历程,强调了液压技术在现代起重机中的重要性。接着,文章深入分析了QY20B型汽车起重机的五大主要运动机构(支腿、回转、伸缩、变幅、起升)的工作原理及相应的液压回路设计。每个回路的设计均考虑了性能要求、功能实现及工作原理,确保系统稳定可靠。此外,文章还详细计算了支腿油缸的受力、液压元件的选择及液压系统的性能验算,确保设计的可行性和安全性。 适合人群:从事工程机械设计、液压系统设计及相关领域的工程师和技术人员,以及对起重机技术感兴趣的高等院校学生和研究人员。 使用场景及目标:①为从事汽车起重机液压系统设计的工程师提供详细的参考案例;②帮助技术人员理解和掌握液压系统设计的关键技术和计算方法;③为高等院校学生提供学习和研究起重机液压系统设计的实用资料。 其他说明:本文不仅提供了详细的液压系统设计过程,还结合了实际工程应用,确保设计的实用性和可靠性。文中引用了大量参考文献,确保设计依据的科学性和权威性。阅读本文有助于读者深入了解汽车起重机液压系统的设计原理和实现方法,为实际工程应用提供有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值