数据库主键

SQL 创建索引的目的是什么?

可紊 提交于 2020-01-19 03:34:21
一、 SQL 创建索引的目的如下: 1 、通过唯一性索引(unique)可确保数据的唯一性; 2 、加快数据的检索速度; 3 、加快表之间的连接; 4 、减少分组和排序时间; 5 、使用优化隐藏器提高系统性能。 二、创建 SQL 索引的语法: CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] (索引类型) INDEX < 索引名 > ON < 表名 > ( < 列名 > [ ASC | DESC ] [ , < 列名 > [ ASC | DESC ] ... ] ) 。 扩展资料: 索引的类别介绍: 1 、唯一索引: 唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。数据库还可能防止添加将在表中创建重复键值的新数据。 2 、主键索引: 数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。 来源: CSDN 作者: 我冷漠 链接: https://blog.csdn.net/weixin_43748615/article/details/103910654

Hibernate理解?

霸气de小男生 提交于 2020-01-18 00:59:16
(1)Hibernate是对象关系映射框架,对JDBC进行非常轻量级的对象封装,是全自动的ORM框架,可以自动生成SQL语句、自动执行。 (2)语言特点 <1>将对数据库的操作转换为对Java对象的操作从而简化开发。 <2>提供线程和进程两个级别的缓存提升应用程序性能。 <3>有丰富的映射方式将Java对象之间的关系转换为数据库表之间的关系。 <4>非侵入式:Hibernate不要求持久化类实现任何接口或继承任何类。 (3)Hibernate优点: <1>封装了JDBC,简化了很多重复性代码。 <2>简化了DAO层编码工作,使开发更对象化了。 <3>移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变Hibernate代码。 <4>支持透明持久化,没有实现任何接口,没有侵入性。 (4)Hibernate核心API有6个分别为:Session、SessionFactory、Transaction、Query、Criteria和Configuration。这些接口可以对持久化对象进行存取、事务控制。 <1>Session接口负责执行被持久化对象的CRUD操作,Session对象是非线程安全的。 <2>SessionFactory接口负责初始化Hibernate。 <3>Query负责查询 <4

为什么JavaBean的主键要设置为Integer类型

对着背影说爱祢 提交于 2020-01-16 20:59:58
一. 问题背景 书城项目,在数据库里面设置了一个book表,主键为book_id。在Java中的Book类中,将book_id设置成为Integer类型,为什么呢? 二. 解答 int 是基本的数据类型,比如1,2,3,4,。。。。。 而 Integer 是一个整形的包装类。 假如查询数据库获取book_id时,假如获取的值为null,此时如果Book类中的book_id是int类型,则会报错。因为不能将null值赋给int型变量。所以整形字段一般用Integer类型 来源: CSDN 作者: Android_la 链接: https://blog.csdn.net/qq_40634846/article/details/104009387

《SQL必知必会》| 第1课学习笔记

隐身守侯 提交于 2020-01-15 01:34:25
《SQL必知必会》 介绍需要了解的 SQL(Structured Query Language——结构化查询语言) 知识,从简单的 数据检索 入手,逐步过渡到一些较为复杂的内容,如 联结 、 子查询 、 存储过程 、 游标 、 触发器 以及 表约束 等。 第1课 了解SQL 介绍什么是 SQL ,它为什么很有用。 1.1 数据库基础 1.1.1 数据库 数据库 是一个以某种 有组织 的方式存储的数据集合(通常是一个文件或一组文件)。 最简单的办法是将数据库想象为一个文件柜。这个文件柜是一个存放数据的物理位置,不管数据是什么,也不管数据是如何组织的。 数据库软件应成为 数据库管理系统DBMS 。 数据库 是通过 DBMS 创建和操纵的容器。 1.1.2 表 文件称为表。 表 是一 结构化 的文件,可用来存储 某种特定类型 的数据。 表可以保存顾客清单、产品目录、或者其他信息清单。 数据库中的每个表都有一个名字来标识自己。这个名字是 唯一的 ,即数据库中没有其他表具有相同的名字。 表具有一些特性, 这些特性定义了数据在表中如何存储,包含存储什么样的数据,数据如何分解,各部分信息如何命名等信息。 描述表的这组信息就是所谓的 模式schema ,模式可以用来描述数据库中特定的表,也可以用来描述整个数据库(和其中表的关系)。 模式 :关于数据库和表的布局及特性的信息。 1.1.3

hibernate注解主键生成策略

二次信任 提交于 2020-01-13 04:40:07
本文转载自: https://www.cnblogs.com/ph123/p/5692194.html 作者:ph123 转载请注明该声明。 Id生成 策略 : @GeneratedValue,JPA通用策略生成器 。         JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.           TABLE:使用一个特定的数据库表格来保存主键。           SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。 @Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq" ) @SequenceGenerator(name ="payablemoney_seq", sequenceName="seq_payment")           IDENTITY:主键由数据库自动生成(主要是自动增长型) @Id @GeneratedValue(strategy = GenerationType.IDENTITY)           AUTO:主键由程序控制。   @Id @GeneratedValue(strategy = GenerationType.AUTO) @ GenericGenerator

Oracle 数据库中enq:TX-index contention等待时间浅析 侵删

。_饼干妹妹 提交于 2020-01-11 22:43:53
前言: 该文来自于Oracle RWP团队的领袖Andrew Holdsworth的一个精彩分享,笔者觉得很精彩,便将其梳理成文,并加上了自己的理解,希望能帮助大家更好的理解TX-index contention等待事件。 enq:TX-index contention: enq:TX-index contention是一个非常常见的等待事件,其专指由于索引分裂产生的竞争等待。最常见的索引竞争一般发生在主键索引上,主键值从序列(sequence)中获取,每个事务都会生成一条新的记录,每条记录都要获得一个新的序列号,因为从sequence中取出的值是单向递增的,当索引中插入数据,并且维护索引结构的时候,不得不一直走向索引的最右侧的分支,对于每一个操作,都会想要维护索引中最右边的叶节点,那么所有的操作都会关注同一个内存块,希望能够维护这块内存,这就是一种典型的竞争形式。但在同一时间,只有一个人能够修改这块内存,因此当有一个人在修改的时候,其他所有想修改的人只能处于等待状态。 在一个并发量很大的OLTP系统中,开发者希望记录每个用户的登录和操作情况,因此需要创建基于主键的索引。接下来我们将通过实验说明如何减少这类索引竞争。 首先来看在没有索引的情况下系统的运行状况,系统运行平稳并且性能良好。如下图所示: 接下来我们尝试最简单的B树索引,索引的的值是通过sequence生成的

从零开始学java(9)

主宰稳场 提交于 2020-01-11 11:48:10
day 9 今天继续数据库。。 12. 分组查询的详解 select stuName , SUM ( mark ) , AVG ( mark ) , COUNT ( * ) from student where mark is not null -- 根据什么条件查询 group by stuName -- 根据什么字段进行统计 having COUNT ( * ) = 2 -- 分组之后的结果进行筛选 order by SUM ( mark ) desc ; -- 对最终的结果进行排序 1.根据条件 执行查询 — where 2.对根据指定的条件查询出来的结果进行聚合函数各种操作, sum() count() avg() max() min() 3.聚合之前 设置分组 进行各种聚合的条件, 根据分组的条件进行聚合。 注意:不设置分组默认统计的是整个表格的数据。 加了分组,默认根据分组条件进行统计 – group by 4.对于分组之后的结果再一次进行筛选 – having 写聚合函数得到的结果进行再一次过滤。 5.对最终的结果进行 排序 – order by 注意事项 : 使用了聚合函数,就不可以查询其他的普通字段,默认只会查询出第一条数据。 但是可以查询 group by 之后的字段。 13.数据库的单表操作 DML操作:插入,删除,修改。 DQL操作:查询。 DDL操作:对库

MySQL的InnoDB索引原理详解

自闭症网瘾萝莉.ら 提交于 2020-01-10 16:19:36
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 摘要 本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。 InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM, 文档 )。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比。 这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出。 1 各种树形结构 本来不打算从二叉搜索树开始,因为网上已经有太多相关文章,但是考虑到清晰的图示对理解问题有很大帮助,也为了保证文章完整性,最后还是加上了这部分。 先看看几种树形结构: 1 搜索二叉树:每个节点有两个子节点,数据量的增大必然导致高度的快速增加,显然这个不适合作为大量数据存储的基础结构。 2 B树:一棵m阶B树是一棵平衡的m路搜索树。最重要的性质是每个非根节点所包含的关键字个数 j 满足:┌m/2┐ – 1 <= j <= m – 1;一个节点的子节点数量会比关键字个数多1,这样关键字就变成了子节点的分割标志。一般会在图示中把关键字画到子节点中间,非常形象,也容易和后面的 B+树区分。由于数据同时存在于叶子节点和非叶子结点中,无法简单完成按顺序遍历B树中的关键字,必须用中序遍历的方法。 3 B+树

PowerDesigner设置MYSQL主键自动增长的方法

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-09 20:32:46
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我一直用的是Oracle数据库,所以在设计CDM的时候,就没有选定表主键自动增长。这是SQL Server和MYSQL才有的方式。Oracle中一般是采用SEQUENCE的方式来处理主键增长的问题的。相对写程序来说,Oracle的处理方式比较复杂一点。 打开PDM,选中一张表,双击打开表属性,选择Columns列,选中主键字段,双击打开,界面的最下方右下角有一个Identity,选中这个之后,生成的表主键就是自动增长的了。 要一个表一个表的手工去修改。这要改到什么时候啊! 在google上搜索了一下,发现居然有很多人碰到这个问题,还有一个vbs的脚本执行一次就解决了。大家可以去搜索一下,脚本名字叫SetIdentity.vbs。 在PD中执行脚本方法也很简单,Tools——Excecute Commands——Edit/Run Scripts。 另外还有一个脚本,是用来把字段的name统一设置为数据库字段的comments字段内容的name2comment.vbs代码。也很好用。(一般name都是中文描述,code就是代码) 来源: oschina 链接: https://my.oschina.net/u/4347/blog/168

06: mysql索引查找原理及调优

▼魔方 西西 提交于 2020-01-09 00:02:01
目录 1.1 常见查找方法举例 1.2 索引数据结构设相关的计算机原理 1.3 MyISAM实现索引 1.4 InnoDB索引实现 1.5 索引使用策略 1.1 常见查找方法举例 1、顺序查找(linear search ) 1. 最基本的查询算法当然是顺序查找(linear search),也就是对比每个元素的方法,不过这种算法在数据量很大时效率是极低的。 2. 数据结构:有序或无序队列 3. 复杂度:O(n) 2、二分查找 1. 从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜素过程结束; 2. 如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且根开始一样从中间元素开始比较。 3. 如果在某一步骤数组为空,则代表找不到。 4. 数据结构:有序数组 5. 复杂度:O(logn) 3、二叉排序树查找 1)二叉排序树的特点是:         1. 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;         2. 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;         3. 它的左、右子树也分别为二叉排序树。     2)搜索的原理:         若b是空树,则搜索失败,否则:         若x等于b的根节点的数据域之值,则查找成功;否则:         若x小于b的根节点的数据域之值