ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java看书6

2021-02-05 11:58:39  阅读:133  来源: 互联网

标签:事务 Java 看书 数据库 索引 范式 数据 连接


对java程序员笔试解析 整理(6)

在这里插入图片描述

第三章 数据库

1.数据库中的事务指什么
事务时数据库中一个单独的执行单元,在数据库中更改数据成功时,在食物中更改的数据便会提交,不在改变,否则事务就会取消或者回滚。
事务必须满足四个属性:原子性、一致性、隔离性和持久性即ACID
原子性:事务是一个不可分割的整体,即当修改数据时,要么全部执行要么不执行,不允许事务部分完成引起错误。
一致性:一个事务在执行前和执行后数据库数据必须保持一致性状态。例如银行转账,转帐前和转账后两个账户的金额之和应该保持不变。数据库的一致性状态由用户来负责,由并发控制实现。
隔离性:也称为独立性,当两个事务并发执行时,为了保证数据的安全性,将一个事务内部操作隔离起来,不被其他正在进行的事务看见。例如一对事务T1T2,对T1而言,T2要么在T1开始前已经结束,要么在T1完成后再开始。事务隔离级别有四种:不提交的读、提交的读、可重复的读和串行化。
持久性:也成称为永久性,事务完成以后DBMS保证他对数据库的修改是永久性的。

2.索引
索引是对数据表中一列或多列的值进行排列的一种结构,使用索引可快速访问数据表中特定信息。数据库中索引可分为聚簇索引和非聚簇索引。
聚簇索引:表数据按照索引顺序来存储,索引项与表中记录物理顺序一致。对于聚簇索引,叶子结点即存储了真实数据行,不再有另外单独的数据页,一张表只能创建一个聚簇索引,聚簇索引一般采用B树来实现。
非聚簇索引:表数据存储顺序和索引顺序无关,叶结点索引字段值指向数据页的逻辑指针,一般也采用B树实现。
创建索引可以大大提高系统的性能,主要体现在以下几个方面:创建唯一性索引可以保证数据库表中每一行数据的唯一性;其次通过索引提高检索速度;可以减少查询分组和排序的时间。
为什么不对所有列建立索引呢,创建索引和维护索引需要耗费时间空间。
建立索引的原则:
定义主键的数据列一定要建立索引
定义有外键的数据列要建立索引
经常查询的数据列最好建立索引
经常用在where子句的数据列建立索引
查询涉及少的不要建立索引
经常存取修改的不要建立索引
对于符合索引按照字段再查询条件出现的频度建立索引。

3.连接
内连接也称自然连接,只有两个表相匹配的字段才能在结果集中出现,返回结果集相配的数据,舍弃不匹配的数据。内连接可能会造成信息的丢失。
外连接分为左外连接、右外连接、全外连接。左外连接除显示符合连接条件的记录外还包含左表中的记录。右外连接同理、全外连接包含所有记录。

4.视图
视图是从基本表中选取出来的数据组成的逻辑窗口,不同于表他是一个虚表。
在数据库中只存放定义而不存放数据,这些数据依然存放在原来的基本表中。主要作用简化数据查询语句;使用户可以多角度看数据;提高数据安全性;提供了一定的逻辑独立性。引入视图机制,用户可以将注意力放在关心的数据上而非全部数据,当数据来源于多张基本表时,并且搜索条件较为复杂时,需要编写的查询语句就会比较繁琐,此时定义视图可以使查询语句变得简单。它不能提高查询效率

5.范式
1NF第一范式指数据库表每一列都是不可分割的数据项。简言之就是不重复的属性。例如姓名,电话号码(一个人可能由办公电话和移动电话),这时将其规划化为1NF姓名、办公电话、移动电话。
2NF第二范式实在第一范式的基础上建立起来的,要求数据库表的每个实例必须可以被唯一区分,为实现区分必须加上一个列以存储各个实例的唯一标志.例如:学号、课程、成绩、学分,组合关键字为(学号,课程),由于学分仅依赖于课程号,对组合关键字只是部分依赖,所有此种方式会导致数据冗余以及更新异常等。解决方法拆分为两个表学生表:学号、课程、分数 成绩表:课程、学分。
3NF第三范式如果关系模式R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式模式。
BCNF构建在第三范式的基础上,如果关系模式R是第一范式,且每个属性都不传递依赖于R的候选键,则称R为BCNF
4NF第四范式。。。看不懂了
这么范式后面重看把,这书讲的也不清楚。

6.数据库线程死锁的原理
死锁指两个或以上的进程在执行过程中,由于竞争资源或者彼此通信而造成的一种阻塞现象。产生死锁的原因一是系统资源不足,二是进程运行顺序不合适,三是资源分配不当。
产生死锁的四个必要条件:
互斥:资源独占一个资源每次只能被一个进程使用
请求与保持:部分分配占有请求,一个进程在申请资源的同时保持对原资源的占有
不可剥夺:不可抢占,资源申请者不能强行占有资源只能占有者自愿释放
循环等待:若干进程之间形成循环等待的关系
解决方法就是破坏这四个条件,
一次封锁法:将所有需要的资源一次加锁,否则不能执行
顺序封锁:预先对数据对象设置顺序,所有要使用的进程都按这个顺序加锁
银行家算法:保证进程处于安全进程序列

7.锁
共享锁ShareLock,用于只读数据,共享锁非独占,允许多个并发事务读取。它具有以下性质,多个事务科封锁一个共享页,任何事务不能修改该页,该页读取完毕S锁立即释放。在sql中锁定第一页还可以对第二页进行修改操作。
排他锁ExclusiveLock也叫写锁,表示对数据进行写操作,如果一个事务对数据加排他锁,其他事务不能加任何锁,只能等待释放。
更新锁也叫U锁,在修改操作初始化阶段用来锁定要修改的资源,避免使用共享锁造成死锁想象。因为使用共享锁使要升级为写锁在执行写操作,但是如果两个事务同时申请写锁时,这些事务都不会释放共享锁造成死锁。更新锁用来预定写锁,它运行其他事务读,但不允许再施加写锁和更新锁,U锁直到事务结束释放。
悲观锁认为每次拿数据别人都会修改,所以每次拿数据都会加锁。
乐观锁认为每次别人都不会修改都不会加锁,拿数据时会使用版本号等看别人是否修改了,乐观锁适合多读的场景,可以提高吞吐量

8.数据库连接池
数据库连接池是一种珍贵有限的资源:建立与数据库的连接是一个耗时的操作;数据库连接的个数有限;
数据库连接池负责分配管理并释放数据库连接,它允许应用程序重复使用现有连接,同时还负责释放最大空闲时间的数据库连接,避免因为没有释放数据库连接而导致的数据连接泄露。

标签:事务,Java,看书,数据库,索引,范式,数据,连接
来源: https://blog.csdn.net/qq_36705705/article/details/113675095

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有