数据库主键

一文读懂之SQL数据库基础

末鹿安然 提交于 2019-12-22 01:58:07
关系型数据库和非关系型数据库(NoSQL)数据库: 关系型数据库,指的是以关系的形式来存储和管理的数据库系统,特点是: 1)以表格的形式保存数据 mysql视图: 视图:是一张基于表格或其他视图生成的虚拟的表,通常被称为虚表。 视图中不存放任何数据,存放的是查询表格的语句。当操作视图时,相当于视图帮忙去操作表格。 作用: 1)限制用户对表格数据的访问,控制表格数据的局部访问。 2、可以实现同一张表格中数据的不同显示。 3、可以对复杂的查询简单化。 数据库索引:Index,是为了提高数据库查询效率而产生的一个对象。一个形象的比喻,有了索引的Mysql就是一辆兰博基尼,没有索引的Mysql就是一个人力三轮车。 特点:索引能提高查询的效率,但是,会降低增删改的效率,因为增删改数据后,因此导致增删改的效率会变低。所以并不是每一列都需要加索引的。 哪些列需要加索引?通常列具有唯一性的可以添加索引。主键/唯一键,Oracle默认给主键和唯一键加上了索引。 -- 创建索引 create index inx_id on tb_class ( id ) ; create index 索引名 on 表名(列名) ; -- 索引创建好后,在后续的所有的查询的where子句中,一但使用该条件,就会自动生效 select * from tb_class where id = 2 ; --

腾讯面试:一条SQL语句执行得很慢的原因有哪些?---不看后悔系列

岁酱吖の 提交于 2019-12-21 05:27:19
说实话,这个问题可以涉及到 MySQL 的很多核心知识,可以扯出一大堆,就像要考你计算机网络的知识时,问你“输入URL回车之后,究竟发生了什么”一样,看看你能说出多少了。 之前腾讯面试的实话,也问到这个问题了,不过答的很不好,之前没去想过相关原因,导致一时之间扯不出来。所以今天,我带大家来详细扯一下有哪些原因,相信你看完之后一定会有所收获,不然你打我。 开始装逼:分类讨论 一条 SQL 语句执行的很慢,那是每次执行都很慢呢?还是大多数情况下是正常的,偶尔出现很慢呢?所以我觉得,我们还得分以下两种情况来讨论。 1、大多数情况是正常的,只是偶尔会出现很慢的情况。 2、在数据量不变的情况下,这条SQL语句一直以来都执行的很慢。 针对这两种情况,我们来分析下可能是哪些原因导致的。 针对偶尔很慢的情况 一条 SQL 大多数情况正常,偶尔才能出现很慢的情况,针对这种情况,我觉得这条SQL语句的书写本身是没什么问题的,而是其他原因导致的,那会是什么原因呢? 数据库在刷新脏页我也无奈啊 当我们要往数据库插入一条数据、或者要更新一条数据的时候,我们知道数据库会在 内存 中把对应字段的数据更新了,但是更新之后,这些更新的字段并不会马上同步持久化到 磁盘 中去,而是把这些更新的记录写入到 redo log 日记中去,等到空闲的时候,在通过 redo log 里的日记把最新的数据同步到 磁盘 中去。 不过

浏览器数据库 IndexedDB 教程

为君一笑 提交于 2019-12-21 05:00:29
浏览器数据库 IndexedDB 教程 阅读 171 收藏 23 2018-08-12 原文链接: mp.weixin.qq.com 腾讯云优惠套餐免费赠送50GB对象存储空间,加8元可选1年域名服务,助力学生党秒变云计算达人。 cloud.tencent.com 概述 随着浏览器的功能不断增强,越来越多的网站开始考虑,将大量数据储存在客户端,这样可以减少从服务器获取数据,直接从本地获取数据。 现有的浏览器数据储存方案,都不适合储存大量数据:Cookie 的大小不超过4KB,且每次请求都会发送回服务器;LocalStorage 在 2.5MB 到 10MB 之间(各家浏览器不同),而且不提供搜索功能,不能建立自定义的索引。所以,需要一种新的解决方案,这就是 IndexedDB 诞生的背景。 通俗地说,IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。这些都是 LocalStorage 所不具备的。就数据库类型而言,IndexedDB 不属于关系型数据库(不支持 SQL 查询语句),更接近 NoSQL 数据库。 IndexedDB 具有以下特点。 (1)键值对储存。 IndexedDB 内部采用对象仓库(object store)存放数据。所有类型的数据都可以直接存入,包括

Mysql 存储引擎的区别和比较

邮差的信 提交于 2019-12-20 08:51:31
MyISAM存储引擎   MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存储引擎之一。 MyISAM拥有较高的插入、查询速度,但不支持事务。 MyISAM主要特性有: 大文件(达到63位文件长度)在支持大文件的文件系统和操作系统上被支持。 当把删除、更新和插入操作混合使用的时候,动态尺寸的行产生更少碎片。这要通过合并相邻被删除的块,以及若下一个块被删除,就扩展到下一块自动完成。 每个MyISAM表最大索引数是64,这可以通过重新编译来改变。每个索引最大的列数是16 NULL被允许在索引的列中,这个值占每个键的0~1个字节 可以把数据文件和索引文件放在不同目录(InnoDB是放在一个目录里面的)    MyISAM引擎使用B+Tree作为索引结构, 叶节点的data域存放的是数据记录的地址 。   下图是MyISAM索引的原理图:    可以看出MyISAM的索引文件仅仅保存数据记录的地址。 在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。   如果我们在Col2上建立一个辅助索引,则此索引的结构如下图所示:   同样也是一颗B+Tree,data域保存数据记录的地址。 因此,MyISAM中索引检索的算法为首先按照B

MySQL 优化技巧

柔情痞子 提交于 2019-12-20 08:48:12
MySQL优化三大方向: 1 优化MySQL所在服务器内核(此优化一般由运维人员完成)。 2 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。 3 对SQL语句以及表优化。 MySQL参数优化: 1 MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看 mysql > show variables like 'max_connections' ; + -- -- -- -- -- -- -- -- - + -- -- -- - + | Variable_name | Value | + -- -- -- -- -- -- -- -- - + -- -- -- - + | max_connections | 500 | + -- -- -- -- -- -- -- -- - + -- -- -- - + 1 row in set ( 0.00 sec ) 2 当前连接的线程的个数 mysql > show status like 'threads_connected' ; + -- -- -- -- -- -- -- -- -- - + -- -- -- - + | Variable_name | Value | + -- -- -- -- -- -- -- -- -- - + -- -- -- - + |

MyBatis+MySQL 返回插入的主键ID

天涯浪子 提交于 2019-12-20 07:23:07
需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。 方法:在mapper中指定keyProperty属性,示例如下: 1 <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.koala.blog.model.Test" > 2 insert into test (id, name) 3 values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}) 4 </insert> 如上所示,我们在insert中指定了 keyProperty ="id" ,其中id代表插入的Test对象的主键属性。 还要明确 useGeneratedKeys ="true" 否则也不会起作用 model,dao皆由mybatis generator自动生成 使用单元测试测试的方法: 1 @Test 2 public void testInsert() { 3 com.koala.blog.model.Test test = new com.koala.blog.model.Test(); 4 test.setName("haha"); 5 int result = testService.insert(test

面试之数据库分表

♀尐吖头ヾ 提交于 2019-12-20 04:55:38
数据库分表) 数据切分 垂直(纵向)切分 水平(横向)切分 分库分表带来的问题 1. 事务一致性问题 2. 跨节点关联查询 join 问题 3. 跨节点分页、排序、函数问题 4. 全局主键避重问题 1. UUID 2. 结合数据库维护主键ID表 3. Snowflake分布式自增ID算法 5. 数据迁移、扩容问题 什么时候考虑切分 1. 能不切分尽量不要切分 2. 数据量过大,正常运维影响业务访问 3. 随着业务发展,需要对某些字段垂直拆分 4. 数据量快速增长 5. 安全性和可用性 案例分析 1. 用户中心业务场景 2. 水平切分方法 "根据数值范围":以主键uid为划分依据,按uid的范围将数据水平切分到多个数据库上。 "根据数值取模":也是以主键uid为划分依据,按uid取模的值将数据水平切分到多个数据库上。 3. 非uid的查询方法 1. 建立非uid属性到uid的映射关系 1. 映射关系 2. 基因法 2. 前台与后台分离 支持分库分表中间件 数据切分 关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。 数据库分布式核心内容无非就是数据切分(Sharding)

数据库范式理解

蹲街弑〆低调 提交于 2019-12-20 02:07:53
   当前我们使用的主流数据库是关系型数据库,所以我是记录在关系型数据库中对范式的一些理解和看法.数据库库范式分为六种(其实还有有一个BCNF),分别为从第一范式到第六范式.高级一层是建立在所有低层的基础上的,如第2范式是建立在第一范式的基础上的,依次类推. 下面分别举例讲解各种范式: 1.第一范式(1NF):   第一范式的核心描述为:数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值.该范式讲的是列的原子性.有两层意思:一层是说每一列只能存一个属性值(如果把2个属性值存在1列中).第二层说的是在一张表中属性值不能重复. 在现代关系行数据库中,都是默认满足第一范式的,所以你想要写出不满足第一范式的结构来还是不可能的事情,所以第一范式就不再多说.如果想深入,可以研究下其他非关系型的数据库的情况. 2.第二范式(2NF)   第二范式的核心描述为:行有唯一的主键,非主键仅对主键依赖. 有2层意思,第一层,每一行都要有主键(单独信息或组合信息),这个容易理解. 第二层意思是非主键对主键依赖,如果是复合主键的情况,非主键属性不能依赖于部分主键属性.如 【产品,仓库号,数量,仓库地址,仓库管理员】,这里(产品+仓库号)为复合主键,而仓库地址和仓库管理员依赖于仓库号,这就是上面描述的'主键属性不能依赖于部分主键属性',因此这是违背第二范式的,符合范式的设计应该为:【产品,仓库号

MySQL中数据表的基本操纵

寵の児 提交于 2019-12-19 09:14:01
本文基于对国家863中部软件孵化器编著的《MySQL从入门到精通》一书的操作实践。 一、创建数据表 数据表属于数据库,在创建数据表之前,应该使用语句 USE 数据库名 指定操作是在那个数据库中进行。 创建数据表的语句为CREATE TABLE ,语法规则如下: 1 CREATE TABLE 表名 2 ( //为括号 3 字段名1 数据类型 [列级别约束条件] [默认值], 4 字段名1 数据类型 [列级别约束条件] [默认值], 5 ...... 6 [表级约束条件] 7 ); //要有分号 使用CREATE TABLE 创建表时,要注意一下几点: (1)要创建表名,不区分大小写,不能使用SQL语言中的关键字,如DROP、ALTER等; (2)数据表中每一个字段的名称和数据类型,如果要创建多个,要用逗号隔开。 1、主键约束 主键,又称主码,是表中一列或者多列的组合。主键约束(Primary Key Constraint)要求主键列的数据唯一,并且不允许为空。主键能够唯一标识表中的一条记录,可以结合外键来定义不同数据表之间的关系,并且可以加快数据库查询的速度。主键和记录之间的关系如同身份证和人之间的关系,它们之间一一对应。主键分为两种类型:单字段主键和多字段联合主键。 (1)单字段主键 a)在定义列的同时指定主键,语法规则如下: 字段名 数据类型 PRIMARY KEY [默认值]

mysql外键

两盒软妹~` 提交于 2019-12-19 06:29:28
MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中主键的某个值。 外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有关联关系的行。 外键的主要作用是保持数据的一致性、完整性。例如,部门表 tb_dept 的主键是 id,在员工表 tb_emp5 中有一个键 deptId 与这个 id 关联。 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。 在table2中字段typeid为数据库testdb的表table1的外键,关联其主键id。 constraint设置索引名(外键名)。 来源: https://www.cnblogs.com/1016391912pm/p/12065676.html