数据库主键

索引

大城市里の小女人 提交于 2019-11-26 23:01:13
索引 一、索引的介绍 数据库中专门用于帮助用户快速查找数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置吗,然后直接获取。 二、索引的作用 约束和加速查找 三、常见的几种索引 - 普通索引 - 唯一索引 - 主键索引 - 联合索引(多列) - 联合主键索引   - 联合唯一索引    - 联合普通索引 无索引和有索引的区别以及建立索引的目的 无索引: 从前往后一条一条查询 有索引:创建索引的本质,就是创建额外的文件(某种格式存储,查询的时候,先去格外的文件找,定好位置,然后再去原始表中直接查询。但是创建索引越多,会对硬盘也是有损耗。 建立索引的目的: a.额外的文件保存特殊的数据结构 b.查询快,但是插入更新删除依然慢 c.创建索引之后,必须命中索引才能有效 1、普通索引 作用:仅有一个加速查找 创建表+普通索引: create table userinfo( nid int not null auto_increment primary key, name varchar(32) not null, email varchar(64) not null, index ix_name(name) ); 普通索引: create index 索引的名字 on 表名(列名) 删除索引: drop index 索引的名字 on 表名 查看索引:

Hibernate报错:org.hibernate.id.IdentifierGenerationException:ids for this class must be manually assig...

为君一笑 提交于 2019-11-26 22:47:49
org.hibernate.id.IdentifierGenerationException:ids for this class must be manually assigned before calling save() hibernate出现这个错误的原因有可能因为,你的表中有个主键。 但是你插入的(调用save)时那个值是null 你要操作的数据表中的id(即主键)的类型设置成了“自动增长类型”,而在你的 hibernate.cfg.xml中,id的生成方式是assigned,即 [xhtml] view plain copy < id name = "id" type = "integer" > < column name = "id" /> < generator class = "assigned" /> </ id > 解决方法: 把主键的生成方式改为native,它的特征是能够根据底层数据库自动选择主键生成方式 即 [xhtml] view plain copy < id name = "id" type = "integer" > < column name = "id" /> < generator class = "native" /> </ id > 转载于:https://www.cnblogs.com/panjing/archive/2013/04

generator class中各项值的作用及定义

坚强是说给别人听的谎言 提交于 2019-11-26 21:50:06
1) assigned 主键由外部程序负责生成,无需Hibernate参与。 2) hilo 通过hi/lo 算法实现的主键生成机制,需要额外的数据库表保存主 键生成历史状态。 3) seqhilo 与hilo 类似,通过hi/lo 算法实现的主键生成机制,只是主键历史 状态保存在Sequence中,适用于支持Sequence的数据库,如Oracle。 4) increment 主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持 一个变量,以保存着当前的最大值,之后每次需要生成主键的时候 将此值加1作为主键。 这种方式可能产生的问题是:如果当前有多个实例访问同一个数据 库,那么由于各个实例各自维护主键状态,不同实例可能生成同样 的主键,从而造成主键重复异常。因此,如果同一数据库有多个实 例访问,此方式必须避免使用。 5) identity 采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。 6) sequence 采用数据库提供的sequence 机制生成主键。如Oralce 中的 Sequence。 7) native 由Hibernate根据底层数据库自行判断采用identity、hilo、sequence 其中一种作为主键生成方式。 8) uuid.hex 由Hibernate基于128 位唯一值产生算法生成16 进制数值

数据库设计经验谈

梦想的初衷 提交于 2019-11-26 21:45:06
数据库设计经验谈 一个成功的管理系统,是由: [50% 的业务 + 50% 的软件 ] 所组成,而 50% 的成功软件又有 [25% 的数据库 + 25% 的程序 ] 所组成,数据库设计的好坏是一个关键。如果把企业的数据比做生命所必需的血液,那么数据库的设计就是应用中最重要的一部分。有关数据库设计的材料汗牛充栋,大学学位课程里也有专门的讲述。不过,就如我们反复强调的那样,再好的老师也比不过经验的教诲。所以我归纳历年来所走的弯路及体会,并在网上找了些对数据库设计颇有造诣的专业人士给大家传授一些设计数据库的技巧和经验。精选了其中的 60 个最佳技巧,并把这些技巧编写成了本文,为了方便索引其内容划分为 5 个部分: 第 1 部分 - 设计数据库之前 这一部分罗列了 12 个基本技巧,包括命名规范和明确业务需求等。 第 2 部分 - 设计数据库表 总共 24 个指南性技巧,涵盖表内字段设计以及应该避免的常见问题等。 第 3 部分 - 选择键 怎么选择键呢?这里有 10 个技巧专门涉及系统生成的主键的正确用法,还有何 时以及如何索引字段以获得最佳性能等。 第 4 部分 - 保证数据完整性 讨论如何保持数据库的清晰和健壮,如何把有害数据降低到最小程度。 第 5 部分 - 各种小技巧 不包括在以上 4 个部分中的其他技巧,五花八门,有了它们希望你的数据库开发工作会更轻松一些。 第 1 部分 -

Powerdesigner 数据库设计

一个人想着一个人 提交于 2019-11-26 21:44:05
本文档不讲述如何使用 PowerDesigner ,而是讲述如何将 PowerDesigner 的特点结合数据库设计的方法更好的设计一个数据库系统。 采用 PowerDesigner 设计数据库 PowerDesigner 作为数据库建模和设计的 CASE 工具之一,在数据库系统开发中发挥着重要作用。 运用 PowerDesigner 进行数据库设计,不但给人直观地理解模型,而且充分运用数据库的技术,优化数据库的设计。 PowerDesigner 支持 Sybase 、 Oracle 、 Informix 、 SQL Server 等多种数据库系统,在应用系统做数据库迁移时不必维护多个数据库脚本。 对于采用结构化分析( SA ), E-R 图、数据流图直至最后的数据库物理图都是系统设计时不可缺少的一个部分,当数据库物理图完成后,应该产生系统的数据字典。运用 PowerDesigner 完全能够完成这一设计流程。 对于采用面向对象的分析( OOA ),由于数据库采用的是 RDBMS ,因此存在对象和关系数据库之间的映射,也需要进行数据库设计。 两种数据库模型 PowerDesigner 可以设计两种数据库模型图:数据库逻辑图(即 E-R 图或概念模型)和数据库物理图(物理模型),并且这两种数据库图是互逆的。 数据库逻辑图是对现实世界的一种抽象,体现实体之间的关系,可以有 1 对 1

Hibernate 复习笔记一

强颜欢笑 提交于 2019-11-26 21:21:38
Hibernate 复习笔记 Hibernate 配置文件 配置文件可以有两种形式:hibernate.cfg.xml(XML) 和 hibernate.properties (PROPERTIES) hibernate.cfg.xml connection.driver_calss 指定数据库的JDBC驱动 connection.url JDBC连接数据库的URL connection.username 数据库用户名 connection.password 数据库密码 dialect 数据库方言 show_sql 显示所执行的SQL语句 默认:false(不显示) hibernate.properties hibernate.connection.driver_calss = com.mysql.jdbc.Driver 指定数据库的JDBC驱动 hibernate.connection.url = jdbc:mysql://localhost:3306/数据库名 JDBC连接数据库的URL hibernate.connection.username = root 数据库用户名 hibernate.connection.password = root 数据库密码 hibernate.dialect = org.hibernate.dialect.MySQLDialect 数据库方言

JFinal保存对象后可以取出主键

我怕爱的太早我们不能终老 提交于 2019-11-26 19:51:40
JFinal保存对象后可以取出主键,即使这个主键是数据库自增长的。 今天无意中发现,JFinal保存对象后可以把主键取出来,我的数据库表主键都是自增的。比如 Blog blog = getModel(Blog.class);//这里没有存放id blog.save(); System.out.println(blog.getInt("id"));//这里居然可以取出来。 今天研究的半天,最后在大家的帮助下终于明白是怎么实现的了。Model类的源码如下: public boolean save() { Config config = getConfig(); Table table = getTable(); StringBuilder sql = new StringBuilder(); List<Object> paras = new ArrayList<Object>(); config.dialect.forModelSave(table, attrs, sql, paras); // if (paras.size() == 0) return false; // The sql "insert into tableName() values()" works fine, so delete this line // -------- Connection conn =

关于数据库主键选择

只愿长相守 提交于 2019-11-26 16:38:32
关于数据库主键选择 UUID做主键 int做主键 UUID做主键 优点: 1.保证数据在表和库都是独立的,有利于后续的分库 2.合并表的时候主键不会重复 3.有大量数据的时候主键不会像int那样越界 4.有利于处理分布式存储的数据表 缺点: 1.字符串型占用空间(存储和索引都占用比较大的空间) 2.插入和查询比int主键差 int做主键 优点: 1.存储空间占用少 2.查询速度比较快 3.插入和更新性能也比较好 4.简单容易记住 缺点: 1.分表略比UUID多一步操作(需要制订表从特定的数字开始自增) 2.合并表数据容易出现主键重复问题 3.分布式存储的数据表比较难存储 来源: https://blog.csdn.net/lllwwyy/article/details/98954612

MySQL约束

≡放荡痞女 提交于 2019-11-26 16:30:16
主键约束(PRIMARY KEY)   主键约束即在表中定义一个主键来唯一确定表中每一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键应该遵守下面的规则: 每个表只能定义一个主键。 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是唯一性原则。 一个列名只能在复合主键列表中出现一次。 复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯一性原则,那么这个复合主键是不正确的。这是最小化原则。 语法格式: 创建表时:  单一主键 <字段名> <数据类型> PRIMARY KEY 复合主键 PRIMARY KEY [字段1,字段2,…,字段n] 外键约束(FOREIGN KEY) 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表。 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。  定义一个外键时,需要遵守下列规则: 父表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则父表与子表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。 必须为父表定义主键。 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

【MySQL】索引相关 -- 2019-08-09 10:53:00

我是研究僧i 提交于 2019-11-26 16:10:27
原文: http://106.13.73.98/__/27/ 目录 普通索引 唯一索引 主键索引 组合索引 正确使用索引的情况 索引的注意事项 执行计划 axplain 慢日志记录 分页性能相关方案 索引是数据库中专门用于帮助用户快速查找数据的一种数据结构. 类似于字典中的目录,查找字典内容可以根据目录查找到数据的存放位置,然后直接获取. 作用:约束和加速查找 常见的几种索引: - 普通索引 - 唯一索引 - 主键索引 - 联合索引(多列) -- 联合主键索引 -- 联合唯一索引 -- 联合普通索引 无索引和有索引的区别: 无索引: 从前往后一条一条查询. 有索引: 创建索引的本质,就是创建额外的文件,以某种格式存储,查询的时候,先去额外的文件找,确定了位置,然后再去原始表中直接查询,但是创建的索引越多,越会对硬盘有损耗. ——————————— 建立索引的目的: 额外的文件保存特殊的数据结构 查询快,但是插入更新删除依旧慢 创建索引之后,必须命中索引才能有效 索引的种类: hash索引: 查询单条快,范围查询慢 btre类索引: b+树,层数增多,数据量指数级增长 (InnoDB默认支持btree索引,这里就使用它) 索引名词: 覆盖索引: 在索引文件中直接获取数据 (例如:select name from userinfo where name = 'zyk';) 索引合并: