数据库原理

数据库原理常见问答

我们两清 提交于 2020-03-11 05:27:58
版权声明:欢迎转载 https://blog.csdn.net/liaoqianwen123/article/details/25322151 常见问答 1. 试述数据库系统有哪些特点(特别是相对于文件系统)? ①数据共享。特别是实现数据字段的共享。②较高的数据独立性。③面向总体的数据结构话模型。④可控冗余度。 ⑤数据的统一管理和控制。 2. 简述关系的性质? ①随意两个元组不能全同。②元组是非排序的。③属性是非排序的。④属性必须有不同的名称。而不同属性能够来自一个域。 ⑤同一属性名处的诸属性值(同列)是同类型数据。且必须来自同一个域。 3.数据库设计过程包含哪几个主要阶段?哪些阶段独立于数据库管理系统? 哪些阶段依赖于数据库管理系统。 4个主要阶段:需求分析、概念设计、逻辑设计和物理设计;需求分析和概念设计独立于数据库管理系统,逻辑设计和物理设计依赖于数据库管理系统。 4. 试述数据字典的含义和作用? 数据字典 也常称为 数据文件夹或系统文件夹 ,它是以数据库有关信息为对象建立起来的数据库; 数据字典总是包含着数据库的各级模式所做的定义及各种描写叙述 。起着系统状态的文件夹表的作用,它帮助用户、数据库管理员和数据库系统本身使用和管理数据库的系统。 5.简述你对数据模型的理解。 数据模型 是严格定义的一组概念的集合。这些概念精确地描写叙述了系统的静态特性、动态特性、完整性约束条件。

Java原理 事务的ACID是指什么?

拥有回忆 提交于 2020-03-02 16:41:42
Java原理 事务的ACID是指什么? 一、什么是Java事务 通常的观念认为,事务仅与数据库相关。 事务必须服从ISO/IEC所制定的ACID原则。 ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。 原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。 一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。 隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。 持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。 通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简单的说就是:要么全部执行成功,要么撤销不执行。 既然事务的概念从数据库而来,那Java事务是什么?之间有什么联系? 实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。 二、为什么需要事务 事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。 举一个简单例子:比如银行转帐业务

ORACLE---Unit01: 数据库原理 、 SQL(DDL、DML)

假如想象 提交于 2020-02-26 18:00:35
--SQL语句是不区分大小写的,但是为了增加可读性,可以将关键字全部大写,非关键子全部小写。 SELECT SYSDATE FROM dual; --SQL语句根据功能有不同分类: --DDL语句(数据定义语言) --用于操作数据库对象。数据库对象包括: --表、视图、索引、序列 --->1.创建表: CREATE TABLE employee_RR( id NUMBER(4), name VARCHAR2(20), gender CHAR(1), birth DATE, salary NUMBER(6,2), job VARCHAR2(30), deptno NUMBER(2) ); --->2.查看表的结构:(两个地方会用到) DESC employee_RR --->3.删除表: DROP TABLE employee_RR; ---DEFAULT ---设置默认值 ---在数据库中,无论字段是什么类型,默认值都是NULL,但是可以在创建表的时候,通过DEFAULT关键字为指定的列单独设置默认值。 ---在数据库中,字符串使用单引号表示字面量,这一点与java不一致,需要注意! ---注:不同的数据类型,数字直接就写数字不需要单引号,而字符的自变量就写单引号。 -- 和Java中不一样的是,在数据库中,不论单一字符还是多字符的自变量,都是单引号。 --

Hibernate缓存原理与策略 Hibernate缓存原理:

可紊 提交于 2020-02-25 01:44:55
Hibernate缓存原理 : 对于Hibernate这类ORM而言,缓存显的尤为重要,它是持久层性能提升的关键.简单来讲Hibernate就是对JDBC进行封装,以实现内部状态的管理,OR关系的映射等,但随之带来的就是数据访问效率的降低,和性能的下降,而缓存就是弥补这一缺点的重要方法. 缓存就是数据库数据在内存中的临时容器,包括数据库数据在内存中的临时拷贝,它位于数据库与数据库访问层中间.ORM在查询数据时首先会根据自身的缓存管理策略,在缓存中查找相关数据,如发现所需的数据,则直接将此数据作为结果加以利用,从而避免了数据库调用性能的开销.而相对内存操作而言,数据库调用是一个代价高昂的过程. 一般来讲ORM中的缓存分为以下几类: 1: 事务级缓存 :即在当前事务范围内的数据缓存.就Hibernate来讲,事务级缓存是基于Session的生命周期实现的,每个Session内部会存在一个数据缓存,它随着 Session的创建而存在,随着Session的销毁而灭亡,因此也称为Session Level Cache. 2: 应用级缓存 :即在某个应用中或应用中某个独立数据库访问子集中的共享缓存,此缓存可由多个事务共享(数据库事务或应用事务),事务之间的缓存共享策略与应用的事务隔离机制密切相关.在Hibernate中,应用级缓存由SessionFactory实现

MyBatis的深入原理分析之1-架构设计以及实例分析

久未见 提交于 2020-02-24 20:23:54
MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现。 一、MyBatis的框架设计 注:上图很大程度上参考了iteye 上的 chenjc_it 所写的博文 原理分析之二:框架整体设计 中的MyBatis架构体图,chenjc_it总结的非常好,赞一个! 1.接口层---和数据库交互的方式 MyBatis和数据库的交互有两种方式: a.使用传统的MyBatis提供的API; b. 使用Mapper接口 1.1.使用传统的MyBatis提供的API 这是传统的传递 Statement Id 和查询参数给 SqlSession 对象,使用 SqlSession 对象完成和数据库的交互; MyBatis 提供了非常方便和简单的API,供用户实现对数据库的增删改查数据操作,以及对数据库连接信息和 MyBatis 自身配置信息的维护操作。 上述使用 MyBatis 的方法,是创建一个和数据库打交道的 SqlSession 对象,然后根据 Statement Id 和参数来操作数据库,这种方式固然很简单和实用,但是它不符合面向对象语言的概念和面向接口编程的编程习惯。由于面向接口的编程是面向对象的大趋势,

Oracle Dataguard原理

房东的猫 提交于 2020-02-22 18:08:39
Oracle DataGuard是Oracle自带的数据同步功能,基本原理是将日志文件从原数据库传输到目标数据库,然后在目标数据库上应用这些日志文件,从而使目标数据库与源数据库保持同步,是一种数据库级别的高可用性方案。 DataGuard可以提供Oracle数据库的冗灾、数据保护、故障恢复等,实现数据库快速切换与灾难性恢复。在生产数据库的保证"事务一致性"时,使用生产库的物理全备份创建备库,备库会通过生产库传输过来的归档日志或重做条目自动维护备用数据库。 DataGuard数据同步技术有以下优势: 1) Oracle数据库自身内置的功能,与每个Oracle新版本的新特性都完全兼容,且不需要另外付费。 2) 配置管理较简单,不需要熟悉其他第三方的软件产品。 3) 物理Standby数据库支持任何类型的数据对象和数据类型; 4) 逻辑Standby数据库处于打开状态,可以在保持数据同步的同时执行查询等操作。 5) 在最大保护模式下,可确保数据的零丢失。 一、架构 Oracle DataGuard由一个primary数据库(生产数据库)及一个或多个standby数据库(最多9个)组成。组成Data Guard的数据库通过Oracle Net连接,并且有可以分布于不同地域。只要各库之间可以相互通信,它们的物理位置并没有什么限制,不受操作系统的限制。 1.Primary 数据库

分布式锁机制原理以及三种实现方式介绍

我们两清 提交于 2020-02-18 05:32:40
很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的东西也是一样的和Java多线程相关的!做好准备,马上开车! 学过Java多线程的应该都知道什么是锁,没学过的也不用担心,Java中的锁可以简单的理解为多线程情况下访问临界资源的一种线程同步机制。 在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等。 一、为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间! 后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图: 上图可以看到,变量A存在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象,例如:UserController控制器中的一个整形类型的成员变量),如果不加任何控制的话

SQL注入原理

核能气质少年 提交于 2020-02-17 02:44:59
原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 摘要 日前,国内最大的程序员社区CSDN网站的用户 数据库 被黑客公开发布,600万用户的登录名及密码被公开泄露,随后又有多家网站的用户密码被流传于网络,连日来引发众多网民对自己账号、密码等互联网信息被盗取的普遍担忧。 网络安全成为了现在互联网的焦点,这也恰恰触动了每一位用户的神经,由于设计的漏洞导致了不可收拾的恶果,验证了一句话“出来混的,迟早是要还的”,所以我想通过专题博文介绍一些常用的攻击技术和防范策略。 SQL Injection也许很多人都知道或者使用过,如果没有了解或完全没有听过也没有关系,因为接下来我们将介绍SQL Injection。 1.1.2 正文 SQL Injection:就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。 具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。 首先让我们了解什么时候可能发生SQL Injection。 假设我们在浏览器中输入URL www.sample.com

java详细面试题

时间秒杀一切 提交于 2020-02-13 06:00:23
struts和springMVC区别? stringbuffer和stringbuilder区别? mybatis原理? soa原理? dubbo的原理? solr怎么搭建,倒序索引? MQ消息队列? SQL语句? maven以及本地仓库? final关键字? 为什么使用ssm而不用ssh? struts2和springmvc区别? 开发工具,jvm,gc,设计模式,平时开发工程是你自己搭建吗? 项目中用到的技术dubbo,zookeeper,solr等? 这三年工作中你统计过自己的代码量大概有多少? redis是多例的还是单例的,在多线程时怎么使用? hashmap线程冲突怎么解决? 介绍一下spring,mybatis。aop用的是静态代理还是动态代理? 介绍电商项目,开发周期多长?技术人员有多少?任务怎么分配什么时候上线?项目模块? 说说你负责的模块的具体代码? 数据库表熟悉吗?有哪些字段? 为什么不使用HttpApi进行项目通信而使用dubbo? TCP和UDP的区别? http,https,ftp,sftp分别使用哪个协议? 给你一个mysql数据库,不使用硬件也不使用软件如何优化? SQL语句的执行顺序? 给你两个表写出笛卡尔积的结果? redis的list数据类型是双向队列,完全可替代MQ,为何还要使用MQ,dubbo的底层原理和实现?

Hive系列之Hive架构设计原理

只谈情不闲聊 提交于 2020-02-12 22:52:44
文章目录 一.Hive基本使用 二. Hive架构设计 三. Hive运行流程详解 一.Hive基本使用 切换到可以操作hive的用户 直接输入hive回车,进入hive cli 常用命令使用 查看所有数据库:show databases; 创建数据库tianliangedu,即为create database tianliangedu 选择数据库 设置显示当前所在数据库名称 set hive.cli.print.current.db=true; 查看某个数据库中所有表:show tables; 创建一个表 向表中插入数据: insert into 查询数据表中的数据: select * from 表名称、 删除一个表:drop table 表名称 § 注意: values_tmp_table_*是对当前会话的数据缓存,暂忽略即可。 exit命令退出当前hive会话session,再进入则不会再出现。 使用总结 使用简单 面向数据和业务编程 二. Hive架构设计 三. Hive运行流程详解 来源: CSDN 作者: SkyingData 链接: https://blog.csdn.net/SkyingData/article/details/104286657