随笔分类 -  数据库

摘要:表结构设计 1、为什么一定要设一个主键? 答:因为你不设主键的情况下,innodb也会帮你生成一个隐藏列,作为自增主键。所以啦,反正都要生成一个主键,那你还不如自己指定一个主键,在有些情况下,就能显式的用上主键索引,提高查询效率! 2、你们主键是用自增还是UUID? 答:肯定答自增啊。innodb中 阅读全文
posted @ 2019-08-14 23:55 myseries 阅读(1350) 评论(0) 推荐(0)
摘要:应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库。 操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问。 MySQL作为一个存储系统,同样具有缓冲池(buffer pool)机制,以避免每次查询数据都进行磁盘 阅读全文
posted @ 2019-08-06 09:58 myseries 阅读(7951) 评论(2) 推荐(11)
摘要:一、并发控制 为啥要进行并发控制? 并发的任务对同一个临界资源进行操作,如果不采取措施,可能导致不一致,故必须进行并发控制(Concurrency Control)。 技术上,通常如何进行并发控制? 通过并发控制保证数据一致性的常见手段有: 锁(Locking) 数据多版本(Multi Versio 阅读全文
posted @ 2019-07-31 17:55 myseries 阅读(601) 评论(0) 推荐(0)
摘要:一、前言 中大型项目中,一旦遇到数据量比较大,小伙伴应该都知道就应该对数据进行拆分了。有垂直和水平两种。 垂直拆分比较简单,也就是本来一个数据库,数据量大之后,从业务角度进行拆分多个库。如下图,独立的拆分出订单库和用户库。 水平拆分的概念,是同一个业务数据量大之后,进行水平拆分。 上图中订单数据达到 阅读全文
posted @ 2019-07-30 10:45 myseries 阅读(2030) 评论(0) 推荐(2)
摘要:数据库表结构: create table user ( id int primary key, name varchar(20), sex varchar(5), index(name) )engine=innodb; select id,name where name='shenjian' sel 阅读全文
posted @ 2019-07-29 19:05 myseries 阅读(62111) 评论(18) 推荐(57)
摘要:数据库字段允许空值,会遇到一些问题,此处包含的一些知识点,和大家聊一聊。 数据准备: 说明: id为索引,非唯一(non unique),允许空(null)。 知识点1(热身):负向查询不能命中索引,会导致全表扫描。 索引字段id上的不等于查询,如上图所示: (1)type=ALL,全表扫描; (2 阅读全文
posted @ 2019-07-29 15:34 myseries 阅读(3474) 评论(0) 推荐(0)
摘要:问题1. 数据库为什么要设计索引? 图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去? 于是,图书管理员设计了一套规则: (1)一楼放历史类,二楼放文学类,三楼放IT类… (2)IT类,又分软件类,硬件类… (3)软件类,又按照书名音序排序… 以便快速找到一本书。 与 阅读全文
posted @ 2019-07-29 15:11 myseries 阅读(1582) 评论(0) 推荐(0)
摘要:explain结果中有一个Extra字段,对分析与优化SQL有很大的帮助 数据准备: 数据说明: 用户表:id主键索引,name普通索引(非唯一),sex无索引; 四行记录:其中name普通索引存在重复记录lisi; 实验目的: 通过构造各类SQL语句,对explain的Extra字段进行说明,启发 阅读全文
posted @ 2019-07-29 09:19 myseries 阅读(10622) 评论(1) 推荐(5)
摘要:问题:explain结果中的type字段代表什么意思? MySQL的官网解释非常简洁,只用了3个单词:连接类型(the join type)。它描述了找到所需数据使用的扫描方式。 最为常见的扫描方式有: system:系统表,少量数据,往往不需要进行磁盘IO; const:常量连接; eq_ref: 阅读全文
posted @ 2019-07-26 17:18 myseries 阅读(5868) 评论(2) 推荐(1)
摘要:对于一些数据量较大的系统,数据库面临的问题除了查询效率低下,还有就是数据入库时间长。特别像报表系统,每天花费在数据导入上的时间可能会长达几个小时或十几个小时之久。因此,优化数据库插入性能是很有意义的。 经过对MySQL InnoDB的一些性能测试,发现一些可以提高insert效率的方法,供大家参考参 阅读全文
posted @ 2019-07-15 20:05 myseries 阅读(47259) 评论(0) 推荐(9)
摘要:简介 1).MySQL中的全文索引是FultLeXT类型的索引。 2).全文索引只能用于InnoDB或MyISAM表,只能为CHAR、VARCHAR、TEXT列创建。 3).在MySQL 5.7.6中,MySQL提供了支持中文、日文和韩文(CJK)的内置全文ngram解析器,以及用于日文的可安装Me 阅读全文
posted @ 2019-06-10 14:44 myseries 阅读(17005) 评论(0) 推荐(0)
摘要:问题: 如何实现 MySQL 的读写分离? MySQL 主从复制原理是啥? 如何解决 MySQL 主从同步的延时问题? 分析 高并发这个阶段,肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是 app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库 阅读全文
posted @ 2019-06-01 12:09 myseries 阅读(1048) 评论(0) 推荐(1)
摘要:概念 Repeatable Read(可重复读):即:事务A在读到一条数据之后,此时事务B对该数据进行了修改并提交,那么事务A再读该数据,读到的还是原来的内容。 实现原理(MVCC [ 多版本并发控制 ]) InnoDB在每行记录后面保存两个隐藏的列来,分别保存了这个行的创建时间和行的删除时间。这里 阅读全文
posted @ 2019-05-27 16:50 myseries 阅读(16190) 评论(0) 推荐(11)
摘要:1 什么是MVCC MVCC全称是: Multiversion concurrency control,多版本并发控制,提供并发访问数据库时,对事务内读取的到的内存做处理,用来避免写操作堵塞读操作的并发问题。 举个例子,程序员A正在读数据库中某些内容,而程序员B正在给这些内容做修改(假设是在一个事务 阅读全文
posted @ 2019-05-27 15:21 myseries 阅读(31076) 评论(11) 推荐(13)
摘要:一、相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--间隙锁(NEXT-KEY锁) |--悲观锁(抽象性,不真实存在这个锁) |--乐观锁(抽象性,不真实存在这个 阅读全文
posted @ 2019-05-27 13:01 myseries 阅读(3640) 评论(0) 推荐(2)
摘要:RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图) 角 阅读全文
posted @ 2019-05-15 19:46 myseries 阅读(57739) 评论(10) 推荐(12)
摘要:下图就描述了一个多个数据库间主从复制与读写分离的模型(来源网络): 用途及条件 mysql主从复制用途 实时灾备,用于故障切换 读写分离,提供查询服务 备份,避免影响业务 主从部署必要条件: 主库开启binlog日志(设置log-bin参数) 主从server-id不同 从库服务器能连通主库 原理 阅读全文
posted @ 2019-05-14 15:57 myseries 阅读(2369) 评论(0) 推荐(0)
摘要:一:什么是sql注入 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。 二:SQL注入攻击的总体思路 1:寻找到SQL注入的位置 2:判断服务器类型和后台数据库类型 3:针对不同的服务器和数据库 阅读全文
posted @ 2019-05-06 18:48 myseries 阅读(246952) 评论(3) 推荐(62)
摘要:数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事例一一阐述它们的概念与联系。 脏读、不可重复读、幻象读概念说 阅读全文
posted @ 2019-04-22 10:57 myseries 阅读(61940) 评论(4) 推荐(26)
摘要:where 和having的区别 "Where"是一个约束声明,使用Where来约束来之数据库的数据,Where是在结果返回之前起作用的,且Where中不能使用聚合函数。 "Having"是一个过滤声明,是在查询返回结果集以后对查询结果进行的过滤操作,在Having中可以使用聚合函数。 having 阅读全文
posted @ 2019-04-19 16:01 myseries 阅读(485) 评论(0) 推荐(0)