`
shatuo
  • 浏览: 26090 次
  • 性别: Icon_minigender_1
  • 来自: 铁力
文章分类
社区版块
存档分类
最新评论

错误的选择创建主键方式

阅读更多
由于经验的不足,在设计数据库时,将表UP_CATEGORY_CATEGORY的主键交由Spring维护,之前设计可以实现方法如下。
 Oracle数据库
先在数据库建立一个自增序列。
create sequence seq_post_id
increment by 1
start with 1;
同时在Spring的配置文件中,增加一个Spring的自增键管理bean-  org.springframework.jdbc.support.incrementer. OracleSequenceMaxValueIncrementer,设置数据库的自增序列名,在需要获取主键时,生成一个org.springframework.jdbc.support.incrementer.DataFieldMaxValueIncrementer类的实例,再通过调用这个实例的nextIntValue方法,获得主键。
 Mysql数据库
需要再建一个表,新建一列,作为主键值的容器,同时在Spring的配置文件中加入Mysql的自增键管理bean- org.springframework.jdbc.support.incrementer.MySQLMaxValueIncrementer,同时设置数据库自增键表的表名,列名,获得主键的方法和Oracle一样。
以上设计存在如下问题。
 对数据库特性依赖比较高。
 不同数据库的配置也不同,不能一劳永逸。
在测试时发现在oracle数据库下不能通过工具生成需要的子增减序列,之前的设计全落空了,只能另寻出路了,这时获得两个建议,从DRM中取得主键,另一个使用Java的内置方法,只要获得一个不重复的值即可。由于持久层改造成DRM管理尚未完成,所以采用了第二个方案,具体实现如下。
import java.rmi.server.UID;
String uid=new UID().toString();   
uid=uid.replaceAll(":", "");  
这里使用一个JDK内置类java.rmi.server.UID,它的作用是生成一个字符串序列,对产生它的主机来说为唯一的标识符,生成的值恰是可以作为主键,用这样的方法获得主键,解决了Spring管理带来的那两个问题。
分享到:
评论

相关推荐

    主键与外键的创建

    创建主键约束通常在创建表时完成,例如在MySQL中,你可以这样创建: ```sql CREATE TABLE Persons ( Id_P int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255), Address varchar(255), ...

    数据主键和外键的错误总结

    ### 数据主键和外键的错误总结 #### 一、主键错误 主键作为数据库表中的关键元素,主要用于确保每一行数据的唯一性。它不仅有助于数据的完整性和一致性,还能提高数据库操作的效率。然而,在实际应用过程中,常常...

    MySQL里Create Index 能否创建主键 Primary Key

    Create Index 是 MySQL 中用于创建索引的语句,但是它不能用于创建主键(Primary Key)。在 MySQL 中,主键是通过 Alter table 语句创建的,而不是通过 Create Index 语句。 首先,让我们了解什么是索引和主键。在...

    创建物化视图ORA-12014错误解决方法

    ### 创建物化视图ORA-12014错误解决方法 #### 背景介绍 在Oracle数据库中,物化视图(Materialized View)是一种用于优化查询性能的重要工具。它预先计算并存储了复杂的查询结果,从而在实际查询时能够快速地返回...

    oracle表主键和外键的区别

    3. 索引:系统通常会为基于主键的字段自动创建索引,以加快查询速度。 4. 指针角色:主键用于与其他表的数据关联,作为不同表间记录的链接。 例如,如果有一个学生表,学号可以被定义为主键,因为它能唯一地标识每...

    SAP创建销售订单时,出现“定价条件错误:必要条件 MWST 丢失”错误,查错及其解决方法

    - 根据实际情况选择合适的主键条件(例如Departure Country / Destination Country 或 VAT Plants abroad Inland (00))。 - 创建或更新针对特定国家(如MX)的MWST条件记录,并确保所有必要的参数都已正确填写。 ...

    MySQL 主键与索引的联系与区别分析

    关系数据库依赖于主键,它是数据库物理...因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数

    oracle数据库主键自动生成

    Oracle 数据库主键自动生成 在 Oracle 数据库中,主键自动生成是指在插入数据时自动生成唯一的主键值,从而简化数据录入和维护工作。下面将详细介绍 Oracle 数据库主键自动生成的实现方法和相关知识点。 序列...

    sql主键产生器

    使用"SQL主键产生器"工具的优点在于,它可以帮助开发者避免手动管理主键,减少错误,提高开发效率。但同时,需要注意的是,主键的选择应基于具体应用场景,如性能需求、数据规模和一致性要求。 例如,在大量并发...

    sql2000建好表以后添加主键

    在SQL Server 2000中,如果在创建完表之后想要添加主键,可以通过`ALTER TABLE`语句来实现这一需求。下面将详细介绍如何在已经创建好的表中添加主键,并提供相关的示例。 #### 1. 理解主键的作用 主键是一种特殊的...

    数据库,索引,主键,约束,sql

    数据库是存储和管理数据的系统,它允许用户以结构化方式访问、操作和查询数据。在数据库中,索引、主键和约束是至关重要的概念,而SQL(Structured Query Language)则是与数据库交互的语言。 首先,索引是提高...

    SQL数据库创建

    本文将详细介绍数据库创建的过程,包括创建新的数据库、创建表、修改表、删除表、创建主键、unique 约束、default 定义等。 1. 创建新的数据库: 创建新的数据库是数据库创建的第一步骤。在创建数据库之前,需要...

    Oracle 创建主键自增表示例代码

    虽然这种方式相比直接支持自增主键的数据库稍显复杂,但它提供了更大的灵活性和控制权。在实际应用中,根据项目需求和团队习惯,可以适当调整序列和触发器的配置。如果在使用过程中遇到任何问题,可以通过提问和讨论...

    数据库中常见的错误以及错误原因和解决方法

    - **解决方法**:确保在创建表时仅指定一个主键字段,并使用`Ctrl`键辅助选择多个字段作为复合主键。 #### 二、别名使用错误 - **错误情况**:在查询中不当使用别名。 - **原因**:别名使用不规范。 - **解决方法**...

    动态创建库/表

    标题“动态创建库/表”所涵盖的知识点主要涉及到如何在不确定数据库数量或表结构时,通过编程方式来构建数据库及其表。下面将详细介绍这个主题。 1. **动态创建数据库** - **SQL语句**:动态创建数据库通常涉及SQL...

    24.Oracle的主键和外键1

    在Oracle中,创建主键有以下两种方式: 1. **创建表时指定主键**:在CREATE TABLE语句中使用`PRIMARY KEY`关键字定义主键字段。 2. **修改已存在的表添加主键**:使用ALTER TABLE语句添加`CONSTRAINT`并指定主键。 ...

    oracle中的sequence实现主键增长

    总的来说,Oracle中的Sequence提供了一种可靠且灵活的方式来生成序列号,适用于需要自动增长主键的场景。通过合理配置和使用,可以有效避免数据冲突,提高插入数据的效率。在设计数据库时,应根据具体业务需求来决定...

    数据库主键设计原则.txt

    是否要采用自动递增的方式 对于以前谈到的主键,要求唯一性,因此大家都用自动递增的方式.这样的方式是非常不可取的.可能是为了方便插入记录时,不必去人为创建主键值. 以为这样会方便,其实不是的.带来的麻烦要远远胜于...

    MyBatis-plus框架代码生成器

    fengyuxinxing-generator针对MyBatis-plus设计,意味着它可以很好地与MyBatis-plus的特性集成,比如自动填充创建时间和修改时间,自定义主键生成策略等。 该生成器的工作流程通常包括以下步骤: 1. **配置**:首先...

Global site tag (gtag.js) - Google Analytics