数据库
文章平均质量分 74
FreeeLinux
A3GM5H3647LPD4QVYMYAER2S47P4WZ2UKBXBCGZES2V62WEY2HULQA
展开
-
mysql的zip版本安装填坑
以前一直用的mysql官网下载msi方式安装,这次在学校装的时候网络有问题,一直下载不下来,然后通过zip方式安装。两种安装方式的教程: 1. msi方式安装教程 2. zip方式安装zip方式安装5.7版本可能会有点问题,我建议使用mysql-5.6版本。安装出现的问题:安装完成后,我使用mysqladmin -uroot -p password wilco修改密码,然后用wilco密码登录原创 2017-11-14 17:28:21 · 469 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎读书笔记--《一》Mysql体系结构和存储引擎
1.1定义数据库和实例数据库:物理操作系统文件或其他形式文件类型的集合。在Mysql中,数据库文件可以使frm、myd、myi、ibd结尾的文件。当使用NDB存储引擎时,数据库的文件可能不是操作系统的文件,而是存放于内存之中的文件,但是定义仍然不变。数据库实例:由数据库后台进程/线程以及一个共享内存区组成。共享内存可以被运行的后台进程/线程共享。需要牢记的是,数据库实例才是整整用来操作数据库文件原创 2017-06-30 10:35:31 · 540 阅读 · 0 评论 -
Mysql架构理解
MySQL架构1.MySQL逻辑架构:这里分为三层: 1.连接层:连接与线程处理,这一层并不是MySQL独有,一般的基于C/S架构的都有类似组件,比如连接处理、授权认证、安全等。 2.SQL处理层:也叫mysql服务器层,包括缓存查询、解析器、优化器,这一部分是MySQL核心功能,包括解析、优化SQL语句,查询缓存目录,内置函数(日期、时间、加密等函数)的实现 3.数据转载 2017-06-19 20:34:52 · 544 阅读 · 0 评论 -
MySQL索引背后的数据结构及算法原理
摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。文章主要内容分为三个部分转载 2017-05-12 16:23:33 · 553 阅读 · 0 评论 -
mysql事务和锁InnoDB
背景 MySQL/InnoDB的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事咨询这方面的问题。同时,微博上也经常会收到MySQL锁相关的私信,让我帮助解决一些死锁的问题。本文,准备就MySQL/InnoDB的加锁问题,展开较为深入的分析与讨论,主要是介绍一种思路,运用此思路,拿到任何一条SQL语句,都能完整的分析出这条语句会加什么锁?会有什么样的使用风险转载 2017-05-12 10:33:43 · 353 阅读 · 0 评论 -
《高性能MySQL》读书笔记--多版本并发控制算法
1.AUTOCOMMITMySQL采用默认自动提交,可以通过如下命令查看和修改:mysql> SHOW VARIABLES LIKE 'AUTOCOMMIT';+---------------+-------+| Variable_name | Value |+---------------+-------+| autocommit | ON |+-------转载 2017-05-12 10:32:09 · 422 阅读 · 0 评论 -
数据库三大范式
范式是关系型数据库规范程度的级别划分,下面来说说数据库的三大范式。首先弄清几个概念: 候选码:候选码是可以区别表中一行数据的属性或属性的集合。比如学生表student(id,name,age,sex),其中id可以作为候选码。id和name组合也可以区别表中一行数据,此时id可以称为码,id和name的组合也是码。但是它们不是候选码,因为去掉name,id也可以表示一行数据。而候选码可以说是不可原创 2017-03-01 00:09:28 · 548 阅读 · 0 评论 -
redis的通用key操作
一:查询获得键值:get keykey 操作主要有3个通配符,* ? [],*通配任意字符,?通配单个字符,[]通配括号内某一个字符例如:某键名site1.keys *查看所有的key,通配方式2.key s*3.key sit[ey]以上三种方式,都可以返回key site。还有一些key的基本操作:原创 2016-11-23 09:23:39 · 848 阅读 · 0 评论 -
大型网站架构演变过程理解
web动静资源分离浏览器的请求分为静态资源请求,与动态资源请求。静态有:html文件,js脚本,css等。动态有:jsp,php等http服务器用来处理静态请求,应用服务器处理动态请求。分别可以称为前端服务器,后端服务器。随着网站访问量变高,可以采取缓存处理。1.客户端(浏览器)缓存,浏览器访问,先从缓存中获取页面。2.前端页面缓存,前端服务器可原创 2016-11-24 17:33:25 · 550 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎读书笔记--《三》文件
本章将分析构成Mysql数据库和InnoDB存储引擎表的各种类型文件,主要有参数文件、日志文件、socket文件、pid文件、Mysql表结构文件、存储引擎文件。3.1参数文件Mysql参数文件my.cnf。Mysql中参数可以分为两类:动态参数和静态参数。动态参数意味着可以再Mysql实例运行中进行更改;静态参数说明在整个实例生命周期内都不能进行更改,就好像是只读的。可以通过SET命令对动态的参数原创 2017-06-30 17:40:35 · 1010 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎读书笔记--《六》锁
数据库系统区别于文件系统的一个关键特性,一方面要最大程度地利用数据库的并发访问,另外一方面还要确保每个用户能以一致的方式读取和修改数据。锁的类型InnoDB存储引擎实现了如下两种标准的行级锁:共享锁(S LOCK),允许事务读一行数据排它锁(X LOCK),允许事务删除或者更新一行数据当一个事务已经获得了行r的共享锁,那么另外的事务可以立即获得行r的共享锁,因为读取并没有改变行r的数据,我们称原创 2017-07-01 18:21:38 · 553 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎读书笔记--《二》InnoDB存储引擎
2.1InnoDB存储引擎概述InnoDB存储引擎是第一个完整支持ACID事务的Mysql存储引擎,行锁设计,支持MVCC,提供一致性非锁定读,支持外键,被设计用来最有效利用内存和CPU。2.2InnoDB体系架构InnoDB存储引擎具备一个大内存池,负责如下工作:维护所有进程/线程需要访问的多个内部数据结构缓存磁盘上的数据,方便快速的读取,并且在对磁盘文件的数据进行修改之前在这里缓存重做日志原创 2017-06-30 12:05:04 · 510 阅读 · 0 评论 -
Mysql内核:INNODB存储引擎--《十一》Insert Buffer
11.2基本概念innodb对于自增主键值得插入是顺序的,因此插入能有较高的插入性能。但在实际生产环境中,用户表的主键仅有并只能有一个,然后表中可能存在多个辅助索引。辅助索引根据类型在插入时可以分为比较顺序到的插入和随机的插入两种。比较顺序的插入可能是时间字段,随机的插入可能更为广泛。innodb存储引擎insert buffer的设计思想是,在插入时首先判断插入的辅助索引叶子是否还在缓冲池中。若在原创 2017-08-12 01:09:06 · 850 阅读 · 0 评论 -
数据库索引设计与优化读书笔记--《四》为SELECT语句创建理想的索引
磁盘及CPU时间的基础假设I/O时间: 随机读 10ms(4KB或8KB的页) 顺序读 40MB/s顺序扫描的CPU时间:6XZX 检查一行记录 5us FETCH 100usb原创 2017-07-04 15:03:14 · 755 阅读 · 0 评论 -
数据库索引设计与优化读书笔记--《三》SQL处理过程
第二章的知识大都是索引的基本知识,就没有写。访问路径(执行计划)的成本很大程度取决于索引片的厚度,即谓词表达式确定的值域范围。索引片越厚,需要顺序扫描的索引页就越多,需要处理的索引记录也就越多,而最大的开销还是来自于增加对表的同步操作,每次表页读取需要10ms。WHERE字句中的列就谓词,如果有足够简单的谓词的列就是匹配列。最后一个匹配列之后的列称为过滤列。 如:多列索引(A,B,C,D),WHE原创 2017-07-02 11:40:54 · 484 阅读 · 0 评论 -
数据库索引设计与优化读书笔记--《一》概述
由于当前机器的内存越来越大,我们完全可以假设B树索引的所有非叶子页通常都会留在内存或者读缓存中。通常只有叶子页需要从磁盘驱动器读取。如果非叶子页不在数据库缓冲池而在磁盘服务器的读缓存中,那么读取索引页可能会花费1ms。而一次磁盘随机读取所花费的时间大约是10ms。 误区一:索引层级不要超过5层。由于非叶子页通常都会留在内存或者读缓存中,所以通常索引任意一个叶子页的时间为10ms~20ms,这原创 2017-07-02 09:55:55 · 521 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎--《九》性能调优
占坑。原创 2017-07-02 09:42:09 · 409 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎读书笔记--《八》备份与恢复
这一章内容比较水,偏重于DBA的实践技能,开发人员我觉得了解下就可以了。备份按照备份的方法可分为:Hot Backup(热备)Cold Backup(冷备)Warm Backup(温备)按照备份数据库的内容来分,又可以分为:完全备份增量备份日志备份完全备份是指对数据库进行一个完整的备份。增量备份是指在上次完全备份的基础上,对更新的数据进行备份。日志备份主要是指对Mysql数据库二级制原创 2017-07-01 19:51:57 · 422 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎读书笔记--《七》事务
事务的ACID四个特性,原子性,一致性,隔离性,持久性,这些已经老生常谈了,就不必说。事务的实现redo在InnoDB存储引擎中,事务日志通过重做(redo)日志文件和InnoDB存储引擎的日志缓冲(InnoDB Log Buffer)来实现。当开始一个事务时,会记录该事务的一个LSN(Log Sequence Number,日志序列号);当事务执行时,会往I浓浓DB存储引擎的日志缓冲里插入事务日志原创 2017-07-01 19:30:24 · 515 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎读书笔记--《五》索引与算法
B +树索引的管理目前Mysql数据库存在的一个普遍问题是,所有对于索引的添加或者删除操作,Mysql数据库是先创建一张临时表,然后把数据导入临时表,删除原表,再把临时表重名为原来的表名。因此对于一张大表,添加和删除索引需要很长的时间。 InnoDB存储引擎从版本InnoDB Plugin开始,支持一种称为快速索引创建方法。当然这种方法只限定于辅助索引,对于主键的创建和删除还是需要重建一张表。对于原创 2017-07-01 00:17:05 · 536 阅读 · 0 评论 -
Mysql技术内幕InnoDB存储引擎读书笔记--《四》表
4.1InnoDB存储引擎表类型如果在创建表时没有显示地定义主键,那么InnoDB存储疫情会按照如下方式选择或者创建主键。首先表中是否有非空的唯一索引,如果有,则该列即为主键不符合上述条件,InnoDB存储疫情自动创建一个6个字节大小的指针4.2InnoDB逻辑存储结构InnoDB存储引擎的所有数据都被逻辑地存放在表空间中。表空间又由段(segment)、区(extent)、页(page)组成原创 2017-06-30 21:42:32 · 691 阅读 · 0 评论 -
redis事务及锁应用、发布订阅模式
事务mysql和ridis事务对比:redis事务时执行命令放到了队列里。注:rollback与discard的区别如果已经成功执行了2条语句,第三条语句出错rollback后前2条语句影响消失。discard只是结束本次事务,前2句造成的影响还在。注:在multi后面的语句中,语句出错可能有2中情况1.语法就有问题这种exec时,所有语原创 2016-11-23 19:10:30 · 688 阅读 · 0 评论 -
reids的hash哈希数据类型操作
Hash哈希数据类型相关类型hset key field value把key中field域的值设为value注:如果没有field域,直接添加,如果有,则覆盖原field域的值hmset key field1 value1 field2 value2 field3 value3 ....设置field->N个域,对应的值是value->Nhget k原创 2016-11-23 18:17:42 · 682 阅读 · 0 评论 -
Mysql子查询、UNION操作
子查询:1.WHERE型子查询指把内层查询的结果作为外层查询结果的比较条件。例如:我们查询一个货物id的最大的那一个值可以通过order by来查询,如:那么,如果不能用order by呢,我们可以用where子查询来解决:和group by组合成的子查询:select goods_id,cat_id,goods_name from go原创 2016-11-21 23:16:32 · 2091 阅读 · 0 评论 -
Mysql查询命令select以及子句分析
查询:(1)where子句select name from 表名 where 表达式select name from 表名 where name like 'Nokia%‘; //再次强调like 模糊匹配只有%和_,分别表示多个个一个,所以正则表达式更强大!(2)group子句一般用在统计场合。和聚合函数一起用。select max(shop_原创 2016-11-21 19:56:17 · 1127 阅读 · 0 评论 -
mysql增删改命令
1.首先创建一张表:create table php313 ( id int primary key auto_increment, //设置id为主键自增长 name char(3) not null default '', //name设为char(3),指的是字符,不论是汉字和是字母,都只能有三个原创 2016-11-21 14:17:54 · 429 阅读 · 0 评论 -
Mysql常用命令及数据类型
一:入门语句1.创建数据库 (数据库名字不能修改)create database php; 创建一个名为php的数据库2.创建数据表create table class ( stu int, name varchar(6), age int ); 创建了一个class表,学生int型,名字varchar型,年龄int型。3.删除数据库drop原创 2016-11-21 01:32:11 · 788 阅读 · 0 评论 -
Mysql快速复习(三)--计算字段、处理函数、汇总数据
一:创建计算字段1.拼接:将值联结到一起构成单个值了用concat()函数来拼接两个列,原创 2016-11-20 16:27:01 · 740 阅读 · 0 评论 -
Mysql快速复习(四)--分组数据
一.分组数据MySQL如果要返回特定检索的数据怎么办?或者只返回特定供应商所提供的产品怎么办?那就分组吧!1.创建分组在具体使用GUOUP BY子句前,需要知道一些重要的规定。(1)GROUP BY子句可以包含任意数目的列,这使得能对分组进行嵌套,为数据分组提供更细致的控制。(2)如果在GROUP BY子句中嵌套了分组,数据将在最后规定的分组上进原创 2016-11-20 17:19:12 · 503 阅读 · 0 评论 -
Mysql快速复习(二)正则表达式
本文使用的表还是上一个表:一:使用mysql正则表达式mysql的like只有%和下划线_,regex功能更强大。其中like要求整个数据都要匹配,而REGEXP只需要部分匹配即可。也就是说,用Like,必须这个字段的所有内容满足条件,而REGEXP只需要有任何一个片段满足即可。1.select id from elec where id regex原创 2016-11-20 00:39:57 · 689 阅读 · 0 评论 -
线程安全的Mysql数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。本文中数据库连接池采用单例模式,数据结构采用list,当然你也可以用queue等数据结构。主要支持预分配连接,获得连接,释放连接,执行数据库语句原创 2016-11-30 10:20:37 · 3739 阅读 · 0 评论 -
C++操作mysql
1.首先需要安装mysql连接库,不知道为什么,网上都不说这个,害得我不知道连接库名字,找了半天。sudo apt-get install libmysql++-dev不过我这里默认你已经装过了mysql服务器。2.然后就可以写代码验证一下:#include #include int main(){ return 0;}未报错,就说明安装好了。原创 2016-11-26 15:44:19 · 652 阅读 · 0 评论 -
Mysql连接查询
关系数据库,是建立在关系模型的基础上的数据库,借助于集合代数等数学概念上的方法来处理数据库中的数据。集合相乘,笛卡尔积,起始就是两个集合的完全组合。设集合A有M个元素,M个元素各不相同。设集合B有N个元素,N个元素各不相同。 A*B得到的积,M*N个元素,不可能重复。集合相乘用逗号表示:select * from ta,tb; ta表*tb表。下面进入正题:左原创 2016-11-22 02:06:55 · 445 阅读 · 0 评论 -
Mysql数据表管理之列的增删改
回顾建表语句create table 表名 (列名称 列类型 [列属性] [默认值], //例如primary key auto_increment列名称 列类型 [列属性] [默认值], //建表就是一个列声明的过程列名称 列类型 [列属性] [默认值],);先说修改表名:alter table 表名 rename 新表名;原创 2016-11-22 02:28:50 · 458 阅读 · 0 评论 -
Mysql视图用法
视图:view如果某个查询结果出现的非常频繁,也就是,靠这个结果当做进行子查询出现的非常频繁。类似于下面这两句的思路,我们想把结果保存到表里,供下次查询用。create table g2 like goods;insert into g2 select ....视图的定义:视图是由查询结果形成的一张虚拟表。视图的创建关键在于select语句上原创 2016-11-22 12:26:01 · 416 阅读 · 0 评论 -
redis有序集合orderset操作
无序集合操作zadd key score1 value1 score2 value2 ...添加元素,score就是排序的依据zrange key start stop [withscores]将集合元素排序后,返回名次[start stop]的元素,默认升序排序withscores是取出的元素显示scoreszrangebyscore key mi原创 2016-11-23 17:51:23 · 1968 阅读 · 0 评论 -
redis集合set操作
单个集合操作sadd key value1 value2向集合中增加元素smembers key查看集合中的元素,由于集合的无序性,查看的元素可能和插入式顺序不一样srem value1 value2...删除集合中名为value1,value2...的元素返回值:忽略不存在的元素,返回真正删除元素的个数spop key返回并删除集合ke原创 2016-11-23 13:15:47 · 796 阅读 · 0 评论 -
redis的链表list操作
lpush key value将值插入到链表头部同理rpush。rpop key返回并删除链表尾元素,同理lpop。lrange key start stop返回链表中[start, stop]中的元素规律:左数从0开始,右数从-1开始所以查看所有元素可以使用:lrange key 0 -1lrem key count value从k原创 2016-11-23 12:05:08 · 738 阅读 · 1 评论 -
redis字符串string类型的操作
redis的SET命令是用来设置在redis键部分的字符串值。下面是我记录了大部分常用的字符串操作的命令:set key value [ex 秒数]/[px 毫秒数] [nx]/[xx]如:set a 1 ex 10,10秒有效注:如果ex px同时写,以后面有效期为准nx:表示key不存在时,执行操作xx:表示key存在时,执行操作mset mul原创 2016-11-23 11:19:02 · 809 阅读 · 0 评论 -
Mysql索引概念和存储过程
索引索引算法1.二叉树索引,时间复杂度O(lgN)。2.哈希表,时间复杂度O(1)。索引原则:1.不过度索引2.索引条件列(where后面最频繁的条件比较适宜索引)3.索引散列值,过于集中的值不要索引。例如:给“男”“女”索引,意义不大。索引缺点:降低了增删改的速度(update/delete/insert)增大了表的文件大小(索引文件甚至可能比原创 2016-11-22 21:26:16 · 1329 阅读 · 0 评论