7.数据库
文章平均质量分 71
郑学炜
这个作者很懒,什么都没留下…
展开
-
6.事务的简介及其ACID四大特性
一、首先什么是事务?事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消。也就是事务具有原子性,一个事务中的一系列的操作要么全部成功,要么一个都不做。事务的结束有两种,当事务中的所以步骤全部成功执行时,事务提交。如果其中一个步骤失败,将发生回滚操作,撤消撤消之前到事务开始时的所以操作。事务的状态有如下几种:1.中止事务:执行中发生故障,不能执行完成的事务...原创 2018-03-16 17:40:42 · 1065 阅读 · 0 评论 -
14.JDBC编程的六个步骤
首先,需要知道使用Java开发任何数据库应用程序都需要4个主要接口:Driver,Connection,Statement和ResultSet。这些接口定义了使用SQL访问数据库的一般架构。访问数据库的Java程序主要有5个步骤,分别是:1)加载驱动程序。2)建立连接。3)创建语句。4)执行语句。5)处理ResultSet。6)关闭连接。那么就简单说明这5个步骤如何实现:1)加载驱动程序在连接到数...原创 2018-03-21 09:52:12 · 1337 阅读 · 0 评论 -
15.Statement和PraparedStatement区别
获取执行sql语句对象,PraparedStament对象 通过Connection对象获取Statement或者PraparedStament对象(使用它)处理sqlStatementStatement st = conn.createStatement();//获取sql语句执行对象st.excuteUpdate(sql);//执行增删改语句st.excuteQuery(sql)...原创 2018-03-21 10:07:09 · 1398 阅读 · 0 评论 -
22.慢查询
mysql> show variables like '%slow_query_log%';查询慢查询是否开启 mysql> set global slow-query_log=1;开启本次数据库连接慢查询 mysql> show variables like'long_query_time%';默认大于10s的查询会被记录 mysql> set globallong_qu...原创 2018-03-21 10:24:50 · 208 阅读 · 0 评论 -
12.什么是SQL注入
直接举个例子说明一下这个sql注入的全过程吧~初步注入--绕过验证,直接登录公司网站登陆框如下:可以看到除了账号密码之外,还有一个公司名的输入框,根据输入框的形式不难推出SQL的写法如下:SELECT * From Table WHERE Name='XX' andPassword='YY' and Corp='ZZ'我发现前两者都做一些检查,而第三个输入框却疏忽了,漏洞就在这里!注入开始,在输入...原创 2018-03-21 11:06:12 · 1975 阅读 · 1 评论 -
13.如何防御SQL注入
本文由于在知乎上搜索到的部分答案,看到网上举例的JAVA例子有点不全,此答案是相对全的答案,而且举了PHP语句的例子,其实在JAVA上也完全可以学到,我们利用的这是该思想。所以通过该文章把这思想给学习到即可。对于服务器配置层面的防范,应该保证生产环境的Webserver是关闭错误信息的,比如PHP在生产环境的配置文件php.ini中的display_errors应该设置为Off,这样就关闭了错误提...原创 2018-03-21 11:24:32 · 533 阅读 · 0 评论 -
1.什么是关系型数据库和非关系型数据库
一、什么是关系型数据库1. 关系数据库:是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。简单说来就是关系型数据库用了选择、投影、连接、并、交、差、除、增删查改等数学方法来实现对数据的存储和查询。可以用SQL语句方便的在一个表及其多个表之间做非常复杂的数据查询。安全性高。2. 非关系型数据库:简称NOSQL,是基于键值对的对应关系,并且不需要经过SQL层的解析,所...原创 2018-04-11 17:54:04 · 13299 阅读 · 1 评论 -
23.数据库分库分表方案
Mysql分库分表方案1.为什么要分表:当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。mysql中有一种机制是表锁定和行锁定,是为了保证数据的完整性。表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这行数据操作完了,才能对这条数据进行操作。2. ...原创 2018-04-23 17:03:22 · 780 阅读 · 0 评论 -
25.权限系统设计
通俗易懂权限管理模块设计-Java最近一直在做CMS系统,发现一些内容其实都是重复出现的,例如权限管理模块。权限管理模块就是为了管理用户是否有权利访问某个权限,如果不能则拒绝访问。其实Java中已经有很成熟的权限管理框架,例如 Shiro,SpringSecurity等,也推荐大家使用。但是一些设计上的东西还是要重复再造过轮子才能发现里面的精髓,所以这份代码,供不太明白的同学也参考参考。下面我将详...原创 2018-05-09 21:47:20 · 262 阅读 · 0 评论 -
29.实战之MYSQL优化
实战中呢: 2章 SQL语句优化本章主要介绍SQL语句优化的相关知识· 2-1 数据准备 (02:49)· 2-2 MySQL慢查日志的开启方式和存储格式 (05:54)· 2-3 MySQL慢查日志分析工具之mysqldumpslow (04:32)· 2-4 MySQL慢查日志分析工具之pt-query-digest (0...原创 2018-05-11 10:17:23 · 705 阅读 · 0 评论 -
24.分库分表导致的分布式事务及其解决方案
事务在数据库系统中,一个事务是指:由一系列数据库操作组成的一个完整的逻辑过程。例如银行转帐,从原账户扣除金额,以及向目标账户添加金额,这两个数据库操作的总和,构成一个完整的逻辑过程,不可拆分。这个过程被称为一个事务,具有ACID特性。ACID:是指在数据库管理系统(DBMS)中,事务(transaction)所具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(...原创 2018-04-26 21:21:43 · 7519 阅读 · 3 评论 -
26.mysql存储引擎
四种mysql存储引擎前言数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引擎。MySQL的核心就是存储引擎。存储引擎查看MySQL给开发者提供了查询存储引擎的功能,我这里使用的是MySQL5...原创 2018-05-05 11:03:39 · 198 阅读 · 0 评论 -
31.mysql学习心得
1. 不要用select * 代替所有的select XX,XX字段,增加代码可读性2. And优先级高于or,所以要or得先加小括号。否则会出现andxx再or的这种情况发生select detail_id as id, product_name as name, product_price as pricefrom order_detail where product_pr...原创 2018-05-18 09:28:27 · 266 阅读 · 0 评论 -
27.海量数据的处理
何谓海量数据处理? 所谓海量数据处理,无非就是基于海量数据上的存储、处理、操作。何谓海量,就是数据量太大,所以导致要么是无法在较短时间内迅速解决,要么是数据太大,导致无法一次性装入内存。 那解决办法呢?针对时间,我们可以采用巧妙的算法搭配合适的数据结构,如Bloom filter/Hash/bit-map/堆/数据库或倒排索引/trie树,针对空间,无非就一个办法:大而化小,分而治之(h...原创 2018-05-06 00:21:25 · 306 阅读 · 0 评论 -
28.深入浅出MYSQL的优化
简单的剖析过程:说起MySQL的查询优化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型..... 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视这些优化建议,并在实际业务场景下合理的运用。 MySQL逻辑架构 如果能在头脑...原创 2018-03-19 18:00:56 · 210 阅读 · 0 评论 -
9.并发事务的丢失更新及其处理方式
并发事务的丢失更新及其处理方式 在事务的隔离级别内容中,能够了解到两个不同的事务在并发的时候可能会发生数据的影响。细心的话可以发现事务隔离级别章节中,脏读、不可重复读、幻读三个问题都是由事务A对数据进行修改、增加,事务B总是在做读操作。如果两事务都在对数据进行修改则会导致另外的问题:丢失更新。1、丢失更新的定义及产生原因。 第一类丢失更新(回滚丢失,Lostupdate) (通过设置隔离...原创 2018-03-19 15:55:45 · 4385 阅读 · 6 评论 -
8.数据库各种锁-乐观悲观共享排它行表锁
我们在操作数据库的时候,可能会由于并发问题而引起的数据的不一致性(数据冲突)乐观锁乐观锁不是数据库自带的,需要我们自己去实现。乐观锁是指操作数据库时(更新操作),想法很乐观,认为这次的操作不会导致冲突,在操作数据时,并不进行任何其他的特殊处理(也就是不加锁),而在进行更新后,再去判断是否有冲突了。通常实现是这样的:在表中的数据进行操作时(更新),先给数据表加一个版本(version)字段,每操作一...原创 2018-03-19 13:49:45 · 476 阅读 · 0 评论 -
7.事务的四种隔离级别
数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事例一一阐述它们的概念与联系。Read uncommitted读未提交,顾名思义,就是一个事务可以读取另一个未提交事务的数据。事例:老板要给程序员发工资,程序员的...原创 2018-03-16 18:41:19 · 285 阅读 · 0 评论 -
2.数据库之超键、候选键、主键、外键
首先看看各种键的定义: 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键(只要有一个键唯一,再随便组其他的键,合起来叫主键)候选键(candidatekey):不含有多余属性的超键称为候选键(最小的超键,ID,身份证号)主键(primary key):关系型数据库中的一条记录中有若干个属性,若其中某一个属性集(注意是集)能唯一标识一条记录,该属性组就可以成为一个主键 (...原创 2018-03-16 19:57:21 · 549 阅读 · 0 评论 -
16.从浅到深讲数据库索引
数据库索引的通俗理解为什么需要索引?「索引就像书的目录,通过书的目录就准确的定位到了书籍具体的内容」,数据在磁盘上是以块的形式存储的。为确保对磁盘操作的原子性,访问数据的时候会一并访问所有数据块。磁盘上的这些数据块与链表类似,即它们都包含一个数据段和一个指针,指针指向下一个节点(数据块)的内存地址,而且它们都不需要连续存储(即逻辑上相邻的数据块在物理上可以相隔很远)。 举个例子来讲,我们有一个数据...原创 2018-03-17 00:25:41 · 286 阅读 · 0 评论 -
4.引用外键的优缺点
作用:保持数据的一致性、完整性 为何说外键有性能问题:1.数据库需要维护外键的内部管理;2.外键等于把数据的一致性事务实现,全部交给数据库服务器完成;3.有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源;4.外键还会因为需要请求对其他表内部加锁而容易出现死锁情况; 数据库外键的使用以及优缺点摘录网上讨论共同观点:主键和索引是不可少的,不仅可以优化数据检...原创 2018-03-17 11:24:50 · 3528 阅读 · 0 评论 -
20.组合索引的使用
为什么有最左原则? 例如你这个联合索引是state/city/zipCode那么state就是第一关 city是第二关, zipCode就是第三关你必须匹配了第一关,才能匹配第二关,匹配了第一关和第二关,才能匹配第三关你不能直接到第二关的索引的格式就是第一层是state,第二层才是city 多列索引是先按照第一列进行排序,然后在第一列排好序的基础上再对第二列排序,如果没有第一列的话,直接访问第二列...原创 2018-03-17 11:45:17 · 3600 阅读 · 2 评论 -
21.索引失效的原因
查看索引的使用情况show status like ‘Handler_read%’;大家可以注意:handler_read_key:这个值越高越好,越高表示使用索引查询到的次数handler_read_rnd_next:这个值越高,说明查询低效 但是如果是同样的sql如果在之前能够使用到索引,那么现在使用不到索引,以下几种主要情况:1. 随着表的增长,where条件出来的数据太多,大于15%,使得...原创 2018-03-17 12:10:08 · 367 阅读 · 0 评论 -
19.建立索引的规则
几个比较经典的规则:建立索引的规则:1、利用最左前缀:Mysql会一直向右查找直到遇到范围操作(>,<,like、between)就停止匹配。比如a=1 and b=2 andc>3 and d=6;此时如果建立了(a,b,c,d)索引,那么后面的d索引是完全没有用到,当换成了(a,b,d,c)就可以用到。2、不能过度索引:在修改表内容的时候,索引必须更新或者重构,所以索引过多时...原创 2018-03-17 12:31:48 · 632 阅读 · 0 评论 -
17.Hash索引和btree索引
Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引。但HASH索引也有一些限制(1)Hash 索引仅仅能满足"=","IN"和"<=>"查询,不能使用范围查询。由于 Hash 索引比较的是进行 Hash 运算之后的 Hash ...原创 2018-03-17 12:42:42 · 195 阅读 · 0 评论 -
18.唯一索引与主键索引的比较
唯一索引唯一索引不允许两行具有相同的索引值。主键索引主键索引是唯一索引的特殊类型。 数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。主键索引要求主键中的每个值是唯一的。当在查询中使用主键索引时,它还允许快速访问数据。 它们的一些比较:(1)对于主健/unique constraint ,...原创 2018-03-17 12:55:22 · 259 阅读 · 1 评论 -
3.联合主键和复合主键
联合主键 复合主键 其实“主键是唯一的索引”这话有点歧义的。举个例子,我们在表中创建了一个ID字段,自动增长,并设为主键,这个是没有问题的,因为“主键是唯一的索引”,ID自动增长保证了唯一性,所以可以。此时,我们再创建一个字段name,类型为varchar,也设置为主键,你会发现,在表的多行中你是可以填写相同的name值的,这岂不是有违“主键是唯一的索引”这句话么?所以我才说“主键是唯一的索引”是...原创 2018-03-17 13:03:26 · 1961 阅读 · 1 评论 -
5.范式之123BC4范式
既然都叫最简单的数据库“范式”教程,我觉得它一定要满足这个要求:看完这篇博客,你一定会明白数据库的“范式”和那些诸如“完全函数依赖”,“部分函数依赖”,“传递函数依赖”等烦人的概念,前提是你得跟着我的思路认真的读完它,好,准备好你的半个小时了吗?我们开始。目录1. 什么是范式?2. 贯穿全文的一个例子。3. 第一范式(1NF)4. 几个重要的概念。5. 第二范式(2N...原创 2018-03-18 13:33:28 · 703 阅读 · 0 评论 -
11.数据库的五大约束
数据库五大约束数据库中的五种约束及其添加方法五大约束1.—-主键约束(Primay Key Coustraint)唯一性,非空性,设置主键约束;2.—-唯一约束(Unique Counstraint)唯一性,可以空,但只能有一个,设置唯一性约束,不能有重复值;3.—-检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)NOT NULL:设置非空约束,该...原创 2018-03-18 16:01:29 · 2105 阅读 · 0 评论 -
10.数据库的七种传播方式
其实数据库的七种传播行为在网上查询了一下,和Spring中使用到的7种事务传播行为是没什么差别的,因为我写的博文基本和JAVA有相关,所以就结合Spring中事务传播和例子来讲一下咯。事务传播行为如下:Require:支持当前事务,如果没有事务,就建一个新的,这是最常见的;Supports:支持当前事务,如果当前没有事务,就以非事务方式执行;Mandatory:支持当前事务,如果当前没有事务,就抛...原创 2018-03-18 16:32:01 · 2989 阅读 · 0 评论 -
30.mysql explain分析
mysql explain分析通过explain可以知道mysql是如何处理语句,分析出查询或是表结构的性能瓶颈。通过expalin可以得到:1. 表的读取顺序2.表的读取操作的操作类型3.哪些索引可以使用4. 哪些索引被实际使用5.表之间的引用6.每张表有多少行被优化器查询 explain显示字段1. id :语句的执行顺序标识2. select_type:使用的查询类型,主要有以下几种查询类型...原创 2018-05-14 18:44:59 · 255 阅读 · 0 评论