数据库结构

MySQL的InnoDB索引原理详解

自闭症网瘾萝莉.ら 提交于 2020-01-10 16:19:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM, 文档 )。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比。 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出。 1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很大帮助,也为了保证文章完整性,最后还是加上了这部分。 先看看几种树形结构: 1 搜索二叉树:每个节点有两个子节点,数据量的增大必然导致高度的快速增加,显然这个不适合作为大量数据存储的基础结构。 2 B树:一棵m阶B树是一棵平衡的m路搜索树。最重要的性质是每个非根节点所包含的关键字个数 j 满足:┌m/2┐ – 1 <= j <= m – 1;一个节点的子节点数量会比关键字个数多1,这样关键字就变成了子节点的分割标志。一般会在图示中把关键字画到子节点中间,非常形象,也容易和后面的 B+树区分。由于数据同时存在于叶子节点和非叶子结点中,无法简单完成按顺序遍历B树中的关键字,必须用中序遍历的方法。 3 B+树

Oracle数据库的体系结构和用户管理

。_饼干妹妹 提交于 2020-01-08 07:44:38
一、Oracle体系结构 数据库的体系结构是指数据库的组成、工作过程、以及数据库中数据的组织与管理机制,要了解Oracle数据库的体系结构,必须理解Oracle系统的主要组件和重要概念。 1、Oracle体系结构概述 Oracle体系结构包含一系列组件,如下图所示,图中显示了Oracle体系结构中的主要组件,包括实例、用户进程、服务器进程、数据文件及其他文件,如参数文件、口令文件和归档日志文件等。从图中可以看出,实例和数据库是Oracle数据库体系结构的核心组成部分,也是最重要的两个概念;DBA一个很重要的工作就是维护实例和数据库本身的正常工作。 1)实例 Oracle实例是后台进程和内存结构的集合,必须启动实例才能访问数据库中的数据。Oracle实例启动时,将分配一个系统全局区(SGA)并启动一系列Oracle后台进程。Oracle实例有两种类型:单进程实例和多进程实例,单进程Oracle实例使用一个进程执行Oracle的全部操作,在单进程环境下的Oracle实例仅允许一个用户可存取;多进程Oracle实例(又称多用户Oracle)使用多个进程来执行Oracle的不同部分,对于每个连接的用户都有一个进程。 2)数据库 数据库是数据的集合,物理上指存储数据库信息的一组操作系统文件,每个数据库有一个逻辑结构和物理结构。物理结构是指构成数据库的一组操作系统文件,主要由三种类型文件组成

在数据库中存储层级结构

假装没事ソ 提交于 2020-01-06 23:37:05
(摘自: http://qinxuye.me/article/storing-hierachical-data-in-database/) 本文参考自 这篇文章 。文章是2003年的,但是现在来看仍然有着实际意义。 层级结构,也叫树形结构。在实际应用中,你经常需要保存层级结构到数据库中。比如说:你的网站上的目录。不过,除非使用类XML的数据库,通用的关系数据库很难做到这点。 对于树形数据的存储有很多种方案。主要的方法有两种:邻接表模型,以及修改过的前序遍历算法。本文将会讨论这两种方法的实现。这里的例子沿用参考文章中的例子,原文使用的PHP,这里将会用Java替代(本例使用Mysql数据库,Java连接Mysql的方法见本文末“备注一”)。 文中使用虚拟的在线食品商店作例子。这个食品商店通过类别、颜色以及种类来来组织它的食品。如图所示: 1)首先是邻接表模型 邻接表相当简单。只需要写一个递归函数来遍历这个树。我们的食品商店的例子用邻接表模型存储时看起来就像是这样: 通过邻接表模型存储法中,我们可以看到Pear,它的父节点是Green,而Green的父节点又是Fruit,以此类推。而根节点是没有父节点的。这里为了方便观看,parent字段使用的字符串,实际应用中只要使用每个节点的ID即可。 现在已经在数据库中插入完毕数据,接下来开始先显示这棵树。 打印这棵树:

mysql 数据导出 常用总结

时光怂恿深爱的人放手 提交于 2020-01-03 03:49:36
mysqldump -t 数据库名 -uroot -p > xxx.sql 总结:上面的导出形式默认表结构和数据; -d表结构; -t数据; -c, --complete-insert使用完整的insert语句(用列名字,方便有表格增加的导入形式)。 数据库表格的变动对比可以到处表结构,然后将设计表格的sql文件导入数据库在导出,用对比工具对比两者。 mysql 查询导出 mysql命令行: select convert((user.userNickName)USING gbk),user.userPhoneNumber,count(*) as deviceSum from tb_device_stream_desc device join tb_media_system_user user on device.userGUID = user.userGUID group by user.userGUID order by deviceSum into outfile '/tmp/test.xls'; shell命令行: mysql -h 127.0.0.1 -u root -p XXXX -P 3306 -D database_name -e "select * from table" > /tmp/test/txt 1.导出结构不导出数据 mysqldump --opt -d

数据库应用_表结构_键值

久未见 提交于 2019-12-27 10:01:55
随笔结构:1.数据导入导出; 2.管理表格的记录; 3.数据的匹配条件. 一,数据的导入与导出 * mysql默认的导入导出路径为/var/lib/mysql-files/ * 定义路径的变量名secure_file_priv * 修改路径的方式:1).创建目录mkdir /myfile; 2).赋权chown mysql /myfile; 3).将secure_file_priv写入配置文件/etc/my.cnf; 4).重启服务; 5).进入数据库使用show variables like "%secure_file_priv%"查看路径是否修改成功. 1.导入数据 例:将/etc/passwd文件内容导入db3库下的user表,并添加行号字段. 思路:建库db3->建表user->导入数据->为表格添加id号 1.1 建库 create database db3; 1.2. 建表 1.3. 导入数据:mysql>load data infile “/var/lib/mysql-files/” into table db3.user fields terminated by “:” lines terminated by “\n”; 1.4. 为表格添加id号: alter table user add id primary key auto_increment first;

mysql的索引结构

走远了吗. 提交于 2019-12-26 07:41:36
前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结。 自上上篇写了手动搭建Redis集群和MySQL主从同步(非Docker)和上篇写了动手实现MySQL读写分离and故障转移之后,索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家。 这篇博客我会谈谈对于索引结构我自己的看法,以及分享如何从零开始一层一层向上最终理解索引结构。 从一个简单的表开始 create table user( id int primary key, age int, height int, weight int, name varchar(32) )engine = innoDb; 相信只要入门数据库的同学都可以理解这个语句,我们也将从这个最简单的表开始,一步步地理解MySQL的索引结构。 首先,我们往这个表中插入一些数据。 INSERT INTO user(id,age,height,weight,name)VALUES(2,1,2,7,'小吉'); INSERT INTO user(id,age,height,weight,name)VALUES(5,2,1,8,'小尼'); INSERT INTO user(id,age,height,weight,name)VALUES(1,4,3,1,'小泰'); INSERT INTO user(id,age

关系型和非关系型数据库的区别?

佐手、 提交于 2019-12-22 21:29:01
当前主流的关系型 数据库 有 Oracle 、DB2、Microsoft SQL Server、Microsoft Access、 MySQL 等。 非关系型数据库有 NoSql、Cloudant。 nosql和关系型数据库比较? 优点: 1)成本:nosql数据库简单易部署,基本都是开源软件,不需要像使用oracle那样花费大量成本购买使用,相比关系型数据库价格便宜。 2)查询速度:nosql数据库将数据存储于缓存之中,关系型数据库将数据存储在硬盘中,自然查询速度远不及nosql数据库。 3)存储数据的格式:nosql的存储格式是key,value形式、文档形式、图片形式等等,所以可以存储基础类型以及对象或者是集合等各种格式,而数据库则只支持基础类型。 4)扩展性:关系型数据库有类似join这样的多表查询机制的限制导致扩展很艰难。 缺点: 1)维护的工具和资料有限,因为nosql是属于新的技术,不能和关系型数据库10几年的技术同日而语。 2)不提供对sql的支持,如果不支持sql这样的工业标准,将产生一定用户的学习和使用成本。 3)不提供关系型数据库对事物的处理。 非关系型数据库的优势:1. 性能NOSQL是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过SQL层的解析,所以性能非常高。2. 可扩展性同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展

SQL Server DBCC命令大全

你离开我真会死。 提交于 2019-12-20 07:31:15
SQL Server DBCC命令大全 原文出处: https://www.cnblogs.com/lyhabc/archive/2013/01/19/2867174.html DBCC DROPCLEANBUFFERS:从缓冲池中删除所有缓存,清除缓冲区 在进行测试时,使用这个命令可以从SQLSERVER的数据缓存data cache(buffer)清除所有的测试数据,以保证测试的公正性。 需要注意的是这个命令只移走干净的缓存,不移走脏缓存。由于这个原因,在执行这个命令前,应该先执行CheckPoint,将所有脏的缓存写入磁盘, 这样在运行DBCC RROPCLEANBUFFERS 时,可以保证所有的数据缓存被清理,而不是其中的一部分。 DBCC CacheStats:显示存在于当前buffer Cache中的对象的信息,例如:hit rates,编译的对象和执行计划 DBCC ErrorLog :如果很少重启mssqlserver服务,那么服务器的日志(不是数据库事务日志)会增长得很快,而且打开和查看日志的速度也会很慢 使用这个命令,可以截断当前的服务器日志,主要是生成一个新的日志。可以考虑设置一个调度任务,每周执行这个命令自动截断服务器日志。 使用存储过程sp_cycle_errorlog也可以达到同样的目的 一、DBCC 帮助类命令 DBCC HELP('?')

mysql数据库的备份与还原

好久不见. 提交于 2019-12-19 09:43:29
备份结构 1.备份表结构 mysqldump -u root -p -d dbname table1 table2 ... > a.sql 2.备份数据库的所有表结构 mysqldumo -u root -p -d dbname > b.sql 3.备份多个数据库的所有表结构 mysqldump -u root -p -d --databases db1 db2... > c.sql 4.备份所有数据库的表结构 mysqldump -u root -p -d --all-databases > d.sql 备份结构和数据(相当于在备份结构的语法上去掉-d选项) 1.备份表结构和数据 mysqldump -u root -p dbname table1 table2 ... > a.sql 2.备份数据库的所有表结构和数据 mysqldump -u root -p dbname > b.sql 3.备份多个数据库的表结构和数据 mysqldump -u root -p --databases db1 db2 > c.sql 4.备份所有数据库的表结构和数据 mysqldump -u root -p --all-databases > d.sql 备份表数据 select ... into outfile select [列名] from table [where 语句] into

反向读取Mysql数据库表结构到PowerDesigner中

假如想象 提交于 2019-12-19 06:24:13
使用PowerDesigner挺长时间了,只是一些简单的表结构设计,因需要对当前数据库进行再设计,需要看一下数据库中所有的表,及表之间的关系,并重新修改表结构,因此需求就是怎么把数据库中的表结构反向生成到PowerDesigner中,以下是对该过程的实践,当前也搜索了其他同学的方法,便于后期使用即其他同学需要,整理该文章。 一、首先确认一下版本和环境 Mysql使用的版本(我用的是5.1) PowerDesigner是32位还是64位程序 Windows10或Windows7(这个影响不大) 二、下载驱动文件并配置 1. 基于Mysql使用的版本下载Windows下连接Mysql数据库的ODBC驱动程序,如下图打开看到的是最新的程序版本,要根据自己使用的Mysql版本选择对应的版本,并根据Powerdesiner是32or64位选择要下载的版本。 官网地址 ​ 2. 安装下载的驱动文件,我下载的是MSI,不是ZIP压缩包。 ​ ​ Custom为自定义安装,我选择的是默认安装,可根据需要选择安装路径。 ​ 点击【install】开始安装 ​ 【finish】安装完成。 ​ 3. 配置ODBC驱动连接 打开控制面板,并找到管理工具选项; ​ 双击管理工具会看到如下页面; ​ 双击ODBC数据源(32位),到如下页面; ​ 点击添加,弹出如下窗口;找到需要的版本驱动,点击【完成】 ​