数据库原理

Mysql数据库基本操作

笑着哭i 提交于 2020-04-04 01:50:43
(进入 mysql\bin 目录下) 注意在 mysql 控制台操作每句后要加分号 ; 初级篇 1、 进入数据库 mysql -u 用户名 -p 密码 2、 导出数据库 mysqldump -u 用户名 -p 密码 数据库名(表名)> 路径 备份.sql 3、 导入数据库 mysql -u 用户名 -p 密码 数据库名< 路径 备份.sql 或者进入mysql,使用source 路径 备份 此方法可以单独导入表 4、 显示所有数据库 show databases; 5、 使用数据库 use 数据库名; 6、 显示所有表 show tables; 7、 创建数据库 create database 数据库名; 8、 创建表 create table 表名(变量名 变量类型(大小)约束条件,变量名 变量类型(变量大小)约束条件,primary key(主键) ); 9、 描述表 describe 表名; 10、向表中输入数据 insert into 表名 values( ); 11、select 列 from 表 order by 列 desc/asc select count(*) from 表名 统计表中记录总数 descending 降序排列的意思 ascending 升序排列 12、删除表内容 delete from 表名 truncate table 表名 13、更新表内容

数据库原理及操作

不羁岁月 提交于 2020-03-29 17:34:06
数据库基础 传统的文件系统管理的缺陷 编写应用程序不方便; 数据冗余不可避免; 应用程序依赖性; 不支持对文件的并发访问; 数据间联系弱 难以按用户视图表示数据; 无阶段性安全控制功能。 数据库管理系统的优点 相互关联的数据的集合; 较少的数据冗余; 程序与数据相互独立; 保证数据的安全、可靠; 最大限度地保证数据的正确性; 数据可以并发使用并能同时保证一致性。 数据库管理系统 数据库是数据的汇集,它以一定的组织形式存在于存储介质上 DBMS是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心 DBA: 负责数据库的规划、设计、协调、维护和管理等工作 应用程序指以数据库为基础的应用程序; 关系型数据Key/Value 数据库 关系:关系就是二维表。并满足如下性质: 表中的行、列次序并不在重要 行row:表中的每一行,又称为一条记录(record) 列column:表中的没一列,称为属性,字段 主键(Primary key):用于唯一确定一个记录的字段 域domain:属性的取值范围,如,性别只能是‘男’和‘女’两个值 外键(Foreign key):用于表之间的一对多的关系 唯一键(Uniq key):可以为null, 非关系型数据库:NO SQL(not only SQL) mencached redis mogoDB RDBMS MySQL: MySQL,

MyBatis框架及原理分析

☆樱花仙子☆ 提交于 2020-03-23 06:40:29
文章转载自 https://www.cnblogs.com/luoxn28/p/6417892.html 感觉写的不错。 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架,其主要就完成2件事情: 封装JDBC操作 利用反射打通Java类与SQL语句之间的相互转换 MyBatis的主要设计目的就是让我们对执行SQL语句时对输入输出的数据管理更加方便,所以方便地写出SQL和方便地获取SQL的执行结果才是MyBatis的核心竞争力。 MyBatis的配置 MyBatis框架和其他绝大部分框架一样,需要一个配置文件,其配置文件大致如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="false"/> <!--<setting name="logImpl" value="STDOUT

hibernate原理解析

北城以北 提交于 2020-03-19 19:55:59
1.hibernate的常用接口 (1) Configucation:负责加载Hibernate的配置及映射信息,启动Hibernate,根据连接到数据库的信息来创建 SessionFactory对象。 (2) SessionFactory: 初始化Hibernate,创建Session对象。他是线程安全的,通常采用单子模式创建此对象。 (3)Session :负责保存·修改·删除·查询·加载对象,这个session不是线程安全的,使用Threadlocal来得到session (相当于创建了一个副本)。 (4)Transaction: 事务处理 开启事务的方法 Transaction tx= session.beginTransaction(); 提交事务 tx.commit(); (5) Query和Criteria:Query是执行数据库查询,Query接口包装了一个HQL语句,HQL语句是面向对象的,它引用类名 和属性名, 而不是表名和字段名。Criteria完全封装了基于字符串形式的查询语句,比Query接口更加面向对象,擅长 动态查询。 2.hibernate体系结构 3.hibernate的工作原理 (1)hibernate如何连接数据库? 配置文件Hibernate.cfg.xml文件中定义了和数据库进行连接的信息,包括数据库方言.jdbc驱动.用户名

SqlServer索引的原理与应用

荒凉一梦 提交于 2020-03-18 20:06:31
索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索 引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有 索引指向数据值,则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数 据库中占用更多的存储空间,同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以我们要合理使用索引,及时更新去除次优索引。 数据表的基本结构 一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个 8K用完的时候,数据库指针会自动分配一个8K的空间。这里,每个8K空间被称为一个数据页(Page),又名页面或数据页面,并分配从0-7的页号, 每个文件的第0页记录引导信息,叫文件头(File header);每8个数据页

SqlServer索引的原理与应用

孤人 提交于 2020-03-18 20:05:35
索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法。 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录可以快速找到你想要的信息,而不需要读完全书。在数据库中,数据库程序使用索 引可以重啊到表中的数据,而不必扫描整个表。书中的目录是一个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。 索引的利弊:查询执行的大部分开销是I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每一个数据页,如果有 索引指向数据值,则查询只需要读少数次的磁盘就行啦。所以合理的使用索引能加速数据的查询。但是索引并不总是提高系统的性能,带索引的表需要在数 据库中占用更多的存储空间,同样用来增删数据的命令运行时间以及维护索引所需的处理时间会更长。所以我们要合理使用索引,及时更新去除次优索引。 数据表的基本结构 一个新表被创建之时,系统将在磁盘中分配一段以8K为单位的连续空间,当字段的值从内存写入磁盘时,就在这一既定空间随机保存,当一个 8K用完的时候,数据库指针会自动分配一个8K的空间。这里,每个8K空间被称为一个数据页(Page),又名页面或数据页面,并分配从0-7的页号, 每个文件的第0页记录引导信息,叫文件头(File header);每8个数据页

sqlite索引的原理

喜你入骨 提交于 2020-03-18 13:59:12
引言 这篇文章 ,里面讲到对于一个41G大小、包含百万条记录的数据库进行查询操作,如果利用了索引,可以把操作耗时从37s降到0.2s。 那么什么是索引呢?利用索引可以加快数据库查询操作的原理是什么呢? 索引的基本原理 数据库提供了一种持久化的数据存储方式,从数据库中查询数据库是一个基本的操作,查询操作的效率是很重要的。 对于查询操作来说,如果被查询的数据已某种方式组织起来,那么查询操作的效率会极大提高。 在数据库中,一条记录会有很多列。如果把这些记录按照列Col1以某种数据结构组织起来,那么列Col2一定是乱序的。 因此,数据库在原始数据之外,维护了满足特定查找算法的数据结构,指向原始数据,称之为 索引 。 举例来说,在下面的图中,数据库有两列Col1、Col2。在存储时,按照列Col1组织各行,比如Col1已二叉树方式组织。如果查找col1中的某一个值,利用二叉树进行二分查找,不需要遍历整个数据库。 这样一来列Col2就是乱序的。为了解决这个问题,为Col2建立了索引,即把Col2也按照某种数据结构(这里是二叉树)组织起来。这样子查找列Col2时只需要进行二分查找即可。  索引的实现 由于数据库是存储在磁盘上的,因此实现索引用的数据结构会存储在磁盘上。磁盘的IO是需要注意的问题。 二叉树 二叉树是一种经典的数据结构,但是并不适合进行数据库索引。

数据库原理 封锁的粒度

眉间皱痕 提交于 2020-03-17 04:06:15
1、封锁粒度是什么? 封锁对象的大小称为封锁的粒度 封锁对象:逻辑单元、物理单元 2、选择封锁粒度的原则? 封锁粒度 和 系统的并发度 、 系统的开销 密切相关 封锁的粒度越大 数据库能够封锁的数据单元就越少,并发度就越小,系统开销也就越小 封锁的粒度越小 数据库能够封锁的数据单元就越多,并发度就越高,系统开销也就越大 因此封锁粒度是一把双刃剑,所以在一个系统当中如果能够提供多种封锁粒度以便不同的事务按照自己的需求选择就比较完美了 这就是所谓的:多粒度封锁 3、具体如何选择封锁粒度呢? 需要处理大量元组的用户事务,以关系为封锁单元 需要处理多个关系的大量元组的用户事务,以数据库为封锁单元 只是处理少量元组的用户事务,以元组为封锁单元 4、多粒度封锁 以树形结构来表示多级封锁粒度 根节点是整个数据库,表示最大的数据粒度 叶节点是最小的数据粒度 三级粒度树 四级粒度树 5、多粒度封锁协议 允许粒度树中的每一个节点独立的被加锁 对一个节点加锁,意味着这个节点的所有后裔节点也同样被加上相同类型的锁 因此多粒度封锁中一个数据对象可能以两种方式封锁: 显式封锁、隐式封锁 6、显式封锁和隐式封锁 显式封锁: 直接加到数据对象上的封锁 隐式封锁:是该数据对象没有独立加锁,是由于其 上级结点加锁而使该数据对象加上了锁 显式封锁和隐式封锁的效果是一样的 显然这种封锁的效率很低,因此引入了一种新型封锁

数据库索引B+Tree原理

杀马特。学长 韩版系。学妹 提交于 2020-03-11 23:48:23
在了解B+Tree之前,先简单介绍一下B Tree。 **B Tree:**数据库设计者,把数据存放到节点以树的形式存储,把节点的大小设置为一个页,那读取一个节点就需要一次I/O操作,如果一次检索需要访问四个节点,根节点常驻内存,那么完成这次检索,需要三次io。 那么数据越小,每页存放的数据就越多,树的高度就越小,io就少,检索就快。 索引就利用上面的性质,设计成B+tree。 **B+tree:**非叶子节点只存放key,叶子节点存放data,并且叶子节点存在指向相邻叶子节点的指针 这样一方面非叶子节点可以存放更多的记录,树更矮,io就少,另一方面,可以通过顺序指针提高区间查询的性能。 MySQL中普遍使用B+Tree做索引, 但在实现上又根据聚簇索引和非聚簇索引而不同。 聚簇索引(主键索引树) 所谓聚簇索引,就是指B+Tree的叶子节点上的data就是数据本身,key为主键,如果是一般索引的话,data便会指向对应的主索引。 非聚簇索(非主键索引树) 非聚簇索引就是指B+Tree的叶子节点上的data,并不是数据本身,而是数据存放的地址。 非聚簇索引比聚簇索引多了一次读取数据的IO操作,所以查找性能上会差。 因为主键索引树的叶子节点直接就是我们要查询的整行数据了。而非主键索引的叶子节点是主键的值,查到主键的值以后,还需要再通过主键的值再进行一次查询,这个过程叫 回表 。 来源:

JPA原理

让人想犯罪 __ 提交于 2020-03-11 17:56:30
事务 事务是计算机应用中不可或缺的组件模型,它保证了用户操作的原子性 ( Atomicity )、一致性 ( Consistency )、隔离性 ( Isolation ) 和持久性 ( Durabilily )。 本地事务 紧密依赖于底层资源管理器(例如数据库连接 ),事务处理局限在当前事务资源内。此种事务处理 方式不存在对应用服务器的依赖,因而部署灵活却无法支持多数据源的分布式事务。在数据库连 接中使用本地事务示例如下: public void transferAccount() { Connection conn = null; Statement stmt = null; try{ conn = getDataSource().getConnection(); // 将自动提交设置为 false,若设置为 true 则数据库将会把每一次数据更新认定为一个事务并自动提交 conn.setAutoCommit(false); stmt = conn.createStatement(); // 将 A 账户中的金额减少 500 stmt.execute("update t_account set amount = amount - 500 where account_id = 'A'"); // 将 B 账户中的金额增加 500 stmt.execute("update t