数据库主键

行式填报之主键设置

无人久伴 提交于 2019-12-18 19:19:38
填报功能是报表工具不可或缺的功能之一,此功能可以让用户在页面中进行数据维护操作。特别是在行式填报中,用户不仅可以修改数据,而且可以插入 / 添加新数据或删除已有数据。这样,在更新行式填报页面中的数据记录时,主键字段就会涉及 insert 和 delete 操作,而对于不同类型的主键我们应该如何进行更新设置?有哪些方面是需要我们注意的呢?下面我们将以雇员信息表的维护为例探讨一下主键设置的相关内容。 附 Employee 表结构: 先准备一张行式填报表,制作效果如下图所示: (行式填报表快速制作教程参见 数据维护不求人,一招搞定增删改 ) 来源脚本设置: 重点来啦 ~~ 去向脚本中不同的主键类型应该如何配置呢?我们来逐个攻破: 1. 单主键 Employee 表的主键为 empno,那么脚本中的 update 函数配置为: A1.update@k(employee:employee_old,employee,empno,ename,salary,sex;empno) 在英文分号后面配置主键 empno,报表在做更新处理时,会以 empno 为主键对比 employee 和 employee_old 对象的数据,然后将差异数据更新到表 employee 中。 完整版脚本内容如下图所示: 2. 多主键 一般情况下,物理表只设置一个主键字段就可以将数据记录区分开来

贷前系统ElasticSearch实践总结

我只是一个虾纸丫 提交于 2019-12-18 16:37:50
贷前系统负责从进件到放款前所有业务流程的实现,其中涉及一些数据量较大、条件多样且复杂的综合查询,引入ElasticSearch主要是为了提高查询效率,并希望基于ElasticSearch快速实现一个简易的数据仓库,提供一些OLAP相关功能。本文将介绍贷前系统ElasticSearch的实践经验。 一、索引 描述:为快速定位数据而设计的某种数据结构。 索引好比是一本书前面的目录,能加快数据库的查询速度。了解索引的构造及使用,对理解ES的工作模式有非常大的帮助。 常用索引: 位图索引 哈希索引 BTREE索引 倒排索引 1.1 位图索引(BitMap) 位图索引适用于字段值为可枚举的有限个数值的情况。 位图索引使用二进制的数字串(bitMap)标识数据是否存在,1标识当前位置(序号)存在数据,0则表示当前位置没有数据。 下图1 为用户表,存储了性别和婚姻状况两个字段; 图2中分别为性别和婚姻状态建立了两个位图索引。 例如:性别->男 对应索引为:101110011,表示第1、3、4、5、8、9个用户为男性。其他属性以此类推。 使用位图索引查询: 男性 并且已婚 的记录 = 101110011 & 11010010 = 100100010,即第1、4、8个用户为已婚男性。 女性 或者未婚的记录 = 010001100 | 001010100 = 011011100, 即第2、3、5、6

MySQL入门

大城市里の小女人 提交于 2019-12-17 22:37:23
目录 1. 数据库的介绍 2. 数据库的类型 关系型数据库核心元素 3. MySQL的基本介绍 4. 常用入门的操作命令 SQL DQL数据查询语言 DML DDL 5 DDL 创建表 显示建表语句 6 数据类型 数值类型(常用) 小数类型 字符串 日期时间类型 7 数据库设计 约束规则 实体 8 三范式 9 E-R模型 10 备份和恢复 备份 恢复 11 消除重复行 12 where条件的运算符进阶 空判断 运算符优先级 13 连接查询[连表查询、多表查询] 内连接查询(inner join) 右连接查询(right join) 左连接查询(left join) 多表关联 14 单表的连表查询[自关联查询] 15 子查询 主查询 主查询和子查询的关系 16 having 17 select查询语句的完整格式 18 Python操作mysql 安装pymysql模块 使用pymysql模块操作数据库 1. 数据库的介绍 数据库就是一个以某种有组织的方式存储的数据集合。 简单的说,数据库(database)就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织、存储的,我们可以通过数据提供的多种方法来管理数据库里的数据。 好处 : 持久化存储 读写速度极高 保证数据的有效性 对程序支持性非常好,容易扩展 我们可以理解为

mybatis 通用mapper返回插入主键

安稳与你 提交于 2019-12-17 14:01:06
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 查看地址:http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/3.Use.md 3.主键策略(仅用于insert方法) 通用Mapper还提供了序列(支持Oracle)、UUID(任意数据库,字段长度32)、主键自增(类似Mysql,Hsqldb)三种方式,其中序列和UUID可以配置多个,主键自增只能配置一个。 由于MySql自增主键最常用,所以这里从最简单的配置方式开始。 1. @GeneratedValue(generator = "JDBC") @Id @GeneratedValue(generator = "JDBC") private Integer id; 这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MySQL 和 SQL Server 这样的关系数据库管理系统的自动递增字段)。 这种情况对应的xml类似下面这样: <insert id="insertAuthor" useGeneratedKeys="true" keyProperty="id"> insert into Author (username,password,email,bio)

MyISAM和InnoDB索引实现对比

随声附和 提交于 2019-12-17 03:30:52
MyISAM索引实现 MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。如图: 这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引要求key是唯一的,而辅助索引的key可以重复。如果我们在Col2上建立一个辅助索引,则此索引的结构如下图所示: 同样也是一颗B+Tree,data域保存数据记录的地址。因此,MyISAM中索引检索的算法为首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址,读取相应数据记录。 MyISAM的索引方式也叫做“非聚集”的,之所以这么称呼是为了与InnoDB的聚集索引区分。 InnoDB索引实现 虽然InnoDB也使用B+Tree作为索引结构,但具体实现方式却与MyISAM截然不同。 第一个重大区别是InnoDB的数据文件本身就是索引文件。从上文知道,MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址。而在InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,这棵树的叶节点data域保存了完整的数据记录

MySQL学习之索引

十年热恋 提交于 2019-12-16 22:53:52
目录 为什么需要索引 索引是什么 索引的本质 索引的目的 索引的副作用 索引的多与少 预读 索引的两大类型 索引的实现方式 b+树索引的分类 索引的种类 索引总结 为什么需要索引 在平常的应用系统中,一般的插入和修改操作很少出现性能方面的问题, 平时我们常遇到的、也是最容易出现问题的还是查询操作,所以对查询语句的优化是非常重要的。 索引可以在不读取整个表的情况下,使数据库应用程序可以更快地查找数据。 索引是什么 索引在MySQL中也称为“键”,是存储引擎快速查找到记录的一种数据结构。 索引的本质 本质就是不断地缩小想要查询数据内容的范围来获取最终我们想要的结果, 同时将随机事件变成顺序事件 索引的目的 加快数据的查询速度 索引的副作用 索引会减慢数据插入和更新的速度 更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新 因此,理想的做法是仅仅在常常被搜索的列 ( 以及表 ) 上面创建索引 索引的多与少 不管索引多还是少都会出现性能问题,所以需要找到一个平衡点。 预读 当经历一次IO时,OS不光把当前磁盘地址的数据读入内存, 还把相邻的磁盘地址的数据读入内存缓冲区内。 经历一次IO读入的数据称之为页,具体多少与OS有关 索引的两大类型 索引的两大类型hash与btree hash类型的索引:查询单条快,范围查询慢 btree类型的索引:b+树

mybatis-plus主键策略

只谈情不闲聊 提交于 2019-12-16 04:18:00
MP 支持多种主键策略 默认是推特的“” 雪花算法“” ,也可以设置其他策略下面我演示主键策略使用 MP的主键定义在一个一个枚举类中 源码如下 package com.baomidou.mybatisplus.annotation; public enum IdType { AUTO(0),//数据库自增 依赖数据库 NONE(1),// 表示该类型未甚至主键类型 (如果没有主键策略)默认根据雪花算法生成 INPUT(2),//用户输入ID(该类型可以通过自己注册填充插件进行填充)   //下面这三种类型,只有当插入对象id为空时 才会自动填充。 ID_WORKER(3),//全局唯一(idWorker)数值类型 UUID(4),//全局唯一(UUID) ID_WORKER_STR(5);//全局唯一(idWorker的字符串表示) private final int key; private IdType(int key) { this.key = key; } public int getKey() { return this.key; } 1,局部主键策略实现 在实体类中 ID属性加注解 @TableId(type = IdType.AUTO) 主键自增 数据库中需要设置主键自增 private Long id; @TableId(type = IdType.NONE) 默认

Mysql基础02-约束

≡放荡痞女 提交于 2019-12-14 19:00:47
约束与索引 概念 1、数据完整性(Data Integrity)是指数据的精确性(Accuracy)和可靠性(Reliability)。 实体完整性(Entity Integrity):例如,同一个表中,不能存在两条完全相同无法区分的记录 域完整性(Domain Integrity):例如:年龄范围0-120,性别范围“男/女” 引用完整性(Referential Integrity):例如:员工所在部门,在部门表中要能找到这个部门 用户自定义完整性(User-defined Integrity):例如:用户名唯一、密码不能为空等 2、约束 键约束:主键约束、外键约束、唯一键约束 Not NULL约束:非空约束 Check约束:检查约束 Default约束:默认值约束 自增约束 3、约束(CONSTRAINTS)与索引(INDEX) 约束是用来对数据业务规则和数据完整性进行实施、维护。约束的作用范围仅限在当前数据库,是逻辑约束,不会因为设置约束而额外占用空间。 索引 是一个单独、物理的存储在数据页上的数据库结构,它是表中 一列或若干列值的集合 和相应的指向表中数据值的物理标识数据页的 逻辑指针清单 (类似于新华字典的目录索引页)。 可以大大提高查询速度。应该在键列、或其他经常要查询、排序、按范围查找的列上建立索引。 Mysql会在主键、唯一键、外键列上自动创建索引

阿里系统研发部数据库组教你一文搞懂 MySQL 单表查询的底层实现

女生的网名这么多〃 提交于 2019-12-14 04:26:30
记得给我点个关注哦,每天都会分享Java有关的文章 前言: 对于我们这些 MySQL的使用者来说,平时用的最多的就是查询功能。DBA时不时丢过来一些慢查询语句让优化,如果连查询是怎么执行的都不清楚还优化个毛线,所以是时候掌握真正的技术了。 MySQL有一个称为 查询优化器的模块,一条查询语句进行语法解析之后就会被交给查询优化器来进行优化,优化的结果就是生成一个所谓的 执行计划,这个执行计划表明了应该使用哪些索引进行查询,表之间的连接顺序是啥样的,最后会按照执行计划中的步骤调用存储引擎提供的方法来真正的执行查询,并将查询结果返回给用户。不过查询优化这个主题有点儿大,在学会跑之前还得先学会走,所以本章先来瞅瞅 MySQL怎么执行单表查询(就是 FROM子句后边只有一个表,最简单的那种查询~)。 为了故事的发展,先得有个表: 我们为这个 single_table表建立了1个聚簇索引和4个二级索引,分别是: 为 id列建立的聚簇索引。 为 key1列建立的 idx_key1二级索引。 为 key2列建立的 idx_key2二级索引,而且该索引是唯一二级索引。 为 key3列建立的 idx_key3二级索引。 为 key_part1、 key_part2、 key_part3列建立的 idx_key_part二级索引,这也是一个联合索引。 然后我们需要为这个表插入10000行记录,除

主键和外键 班级表

試著忘記壹切 提交于 2019-12-14 02:18:44
主外键的存在是依托两个实体之间的关系而存在的; 比如班级与学生的关系: 一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系; 那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢? 因为,你想一想班级表内如果放学生那么记录可能就是这样: 1班ID 1班 xx同学id 1班ID 1班 xx同学id … 这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的; 下面简单给你讲下大概建成的表结构 –建班级表 create table class( classid int primary key,–定义班级ID为主键 classname varchar(15) ) –建学生表 create table students( studentid int primary key,–定义学生ID为主键 classid int ,–外键值,跟班级表classid 属性类型相同 stuname varchar(20),–学生姓名 —定义外键 foreign key(classid) references class(classid) --本表classid是基于class表classid的外键 ) 如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在