自增长主键Id的设计】的更多相关文章

http://www.cnblogs.com/lhking/p/3945865.html…
一.引言 在使用ORM框架时,一个表有一个主键是必须的,如果没有主键,就没有办法来唯一的更新一条记录.在Sql Server数据库和Mysql数据库设置自增长的主键是一件很轻松的事情,如果在Oracle数据库中设置自增长的主键是比较繁琐的.本文不讨论数据库里单表的自增长问题,探讨的是多表自增长唯一Id的设计.如果各位看官遇到这个多表自增长唯一Id的这个需求,会怎么处理呢? 二.GUID的介绍 关于自增长主键的问题,有些人可能会想到.Net中的GUID,先对这个GUID进行测试. public v…
mybatis提供了注解方式编写sql,省去了配置并编写xml mapper文件的麻烦,今天遇到了获取自增长主键返回值的问题,发现相关问答比较少,还好最后还是圆满解决了,现把重点记录一下,解决问题的关键就是以下几行代码: @Insert("insert into Product(title, image, price, detail, summary, seller) values(#{title},#{image},#{price},#{detail},#{summary},#{seller}…
原文地址:http://www.blogs8.cn/posts/WWpt35l mybatis提供了注解方式编写sql,省去了配置并编写xml mapper文件的麻烦,今天遇到了获取自增长主键返回值的问题,发现相关问答比较少,还好最后还是圆满解决了,现把重点记录一下,解决问题的关键就是以下几行代码: 1 @Insert("insert into Product(title, image, price, detail, summary, seller) values(#{title},#{imag…
From: http://blog.csdn.net/zbc496218/article/details/51082983 MySqlConnection conn = new MySqlConnection("连接数据库字符串"); conn.Open(); MySqlCommand mycmd = new MySqlCommand(); mycmd.Connection = conn; mycmd.CommandType = CommandType.Text; mycmd.Comm…
sqlserver有output,Oracle有Sequence.Access用下面的方法: public int InsertEx(User user) { ; using (OleDbConnection conn = new OleDbConnection(AccessHelper.connectionString)) { conn.Open(); OleDbCommand cmd = new OleDbCommand { Connection = conn, CommandType =…
mysql设置了自增长主键ID,插入失败的那个自增长ID也加一的,比如失败5个,下一个成功的不是在原来最后成功数据加1,而是直接变成加6了,失败次数一次就自动增长1了,能不能让失败的不增长的? 或者说mysql插入数据失败,怎么能防止主键增长? MYSQL不保证AUTO_INCREMENT依次增长(1,2,3,4,5),但是可以保证正向增长(1,3,5,9)所以,当你某次操作失败后,下次AUTO_INCREMENT就不是顺序的了. innodb的自增是缓存在内存字典中的,分配方式是先预留,然后再…
mybaits两种获取自增主键ID的方法:一种是使用useGeneratedKeys,第二种是selectKey方法获取. useGeneratedKeys <insert id="insert" parameterType="com.github.chengbin.auth.entity.User" useGeneratedKeys="true" keyProperty="id"> insert into sys…
说明:MyCAT自增长主键和返回生成主键ID的实现 1) mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0:这里做一个简单的测试 创建测试表 -------------------------------------- --创建测试表 ------------------------------------- USE test; CREATE TABLE IF NOT EXISTS t_auto_increment ( id INT NOT NULL…
参考:mybatis添加记录时返回主键id 场景 有些时候我们在添加记录成功后希望能直接获取到该记录的主键id值,而不需要再执行一次查询操作.在使用mybatis作为ORM组件时,可以很方便地达到这个目的.鉴于mybatis目前已经支持xml配置和注解2种方式,所以分别给予详细介绍. 数据表设计: drop table if exists `test`; create table `test` ( `id` ) NOT NULL AUTO_INCREMENT COMMENT 'ID', // 主…
``code 在SQLServer2005环境下,表的主键应该怎样设计. 目前主要用到的主键方案共三种 自动增长主键 手动增长主键 UNIQUEIDENTIFIER主键 1.先说自动增长主键,它的优点是简单,类型支持bigint.但是它有致命的弱点: 当我们需要在多个数据库间进行数据的复制时(SQL Server的数据分发.订阅机制允许我们进行库间的数据复制操作),自动增长型字段可能造成数据合并时的主键冲突.设想一个数据库中的Order表向另一个库中的Order表复制数据库时,OrderID到底…
1.了解MongoDB的ObjectId        MongoDB的文档固定是使用“_id”作为主键的,它可以是任何类型的,默认是个ObjectId对象(在Java中则表现为字符串),那么为什么MongoDB没有采用其他比较常规的做法(比如MySql的自增主键),而是采用了ObjectId的形式来实现?别着急,咱们看看ObjectId的生成方式便可知悉.        ObjectId使用12字节的存储空间,每个字节两位十六进制数字,是一个24位的字符串.由于看起来很长,不少人会觉得难以处理…
在SQL Server 2005环境下,表的主键应该怎样设计.目前主要用到的主键方案共三种: 自动增长主键 手动增长主键 UNIQUEIDENTIFIER主键 1.先说自动增长主键,它的优点是简单,类型支持bigint.但是它有致命的弱点: 当我们需要在多个数据库间进行数据的复制时(SQL Server的数据分发.订阅机制允许我们进行库间的数据复制操作),自动增长型字段可能造成数据合并时的主键冲突.设想一个数据库中的Order表向另一个库中的Order表复制数据库时,OrderID到底该不该自动…
逻辑数据库设计 - 需要ID(谈主键Id) 本文的目标就是要确认那些使用了主键,却混淆了主键的本质而造成的一种反模式. 一.确立主键规范 每个了解数据库设计的人都知道,主键对于一张表来说是一个很重要,甚至必需的部分.这确实是事实,主键是好的数据库设计的一部分.主键是数据库确保数据行在整张表唯一性的保障.它是定位到一条记录并且确保不会重复存储的逻辑机制.主键也同时可以被外键引用来建立表与表之间的关系. 难点是选择那一列作为主键.大多数表中的每个属性值都有可能被很多行使用.例如姓名,电子邮件地址等等…
需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值. 方法:在mapper中指定keyProperty属性,示例如下: <insert id="insertAndGetId" useGeneratedKeys="true" keyProperty="userId" parameterType="com.chenzhou.mybatis.User"> insert into us…
今朝有幸尝芒果,发现自增长ID类型有多种,唯独没有Long/Int. 一思路:1. 自建一个Collection(表,假设名为:IdentityEntity,其中字段:_id, Key, Value,其中_id你懂的,Key:Collection名,需要用Long/Int自增长主键的Collection名,value:Key字段中所存Collection的Long/Int自增长最大值),此表用于存入要用Long/Int自增长主键的Collection信息(为方便举例:XLogs)结构自建的Col…
一个自增长ID的对象被save或者persist后,会返回其主键ID: Department department = new Department(); department.setName("xxxxxxx"); session.persist(department); System.out.println("id = " + department2.getId()); Department department2 = new Department(); dep…
一.场景: 插入数据库的值需要立即得到返回的主键id进行下一步程序操作 二.解决方法: 第一种:使用通用mapper的插入方法 Mapper.insertSelective(record): 此方法:插入一条数据,只插入不为null的字段,不会影响有默认值的字段支持Oracle序列,UUID,类似Mysql的INDENTITY自动增长(自动回写)优先使用传入的参数值,参数值空时,才会使用序列.UUID,自动增长 controller的实际应用:使用方法id会直接将映射到参数的实体上使用时直接使用…
insert元素 属性详解 其属性如下: parameterType ,入参的全限定类名或类型别名 keyColumn ,设置数据表自动生成的主键名.对特定数据库(如PostgreSQL),若自动生成的主键不是第一个字段则必须设置 keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中 useGeneratedKeys ,取值范围true|false(默认值),设置是否使用JDBC的getGenerea…
代码如下: @Override public void saveTopicResource(TopicResourceModel model, Integer userId) { TopicResource topicResource = new TopicResource(); BeanUtils.copyProperties(model, topicResource); int result=0; if (model.getResId() == null) { topicResource.s…
分布式全局唯一ID生成策略​ https://www.cnblogs.com/vandusty/p/11462585.html 一.背景 分布式系统中我们会对一些数据量大的业务进行分拆,如:用户表,订单表.因为数据量巨大一张表无法承接,就会对其进行分库分表.但一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题. 1.1 唯一ID的特性 整个系统ID唯一; ID是数字类型,而且是趋势递增; ID简短,查询效率快. 1.2 递增与趋势递增 递增 趋势递增 第一次生成的ID为12,下一次…
mybatis-plus是mybatis增强版,用mybatis-plus可以省去很多DAO层代码和数据库操作语句的编写.但是需要我们配置好条件. 情景: 向数据库新增一条实例,我们要调用 insert(T t)方法:向数据库批量新增实例,我们调用inserBatch(List<T> list)方法. 当然,这些都是mybatis-plus已经封装好的,我们直接用,DAO层代码和xml文件不用自己编写.但是,我们数据库新增实例,主键ID一般都是自增长的,不用人工给它赋值. 那么mybatis-…
原文链接:https://blog.csdn.net/RuobaiMEN/article/details/79794199 MySQL数据库表中有自增主键ID,当用SQL插入语句中插入语句带有ID列值记录的时候: 如果指定了该列的值,则新插入的值不能和已有的值重复,而且必须大于其中最大的一个值: 也可以不指定该列的值,只将其他列的值插入,让ID还是按照MySQL自增自己填: 具体: 1.创建数据库 create table if not exists userInfo ( id int PRIM…
一.主键id的生成 数据库表里通常都会有一个主键id,来作为这条数据的唯一标识. 常见的方式 数据库自动增长 这种很常见了,可以做到全库唯一.因为id是天然排序的,对于涉及到排序的操作会很方便. UUID 上面的自动增长,虽然简单,但是对于分表这样的操作来说就比较麻烦.因为你在第二张插入数据的时候,需要拿到上一张表最后一个数据的id. UUID则不同,每次都一个随机唯一的值,不过因为是随机,所以也就没有排序了. redis redis也可以用来生成id,利用redis的原子操作.好处是可以不依赖…
在JDBC3.0规范中,当新增记录时,允许将数据库自动产生的主键值绑定到Statement或PreparedStatement中.使用Statement时,可以通过以下方法绑定主键值: int executeUpdate(String sql,int autoGeneratedKeys) 也可以通过Connection创建绑定自增值的PreparedStatement: PreparedStatement prepareStatement(String sql,int autoGenerated…
先说一下没有注解的 先给出实体类: public class City { private int city_id; private String city_name; public int getCity_id() { return city_id; } public void setCity_id(int city_id) { this.city_id = city_id; } public String getCity_name() { return city_name; } public…
1.对应xml文件<insert id="insert" parameterType="DetectStandard"useGeneratedKeys="true" keyColumn="id" keyProperty="id"> insert into t_detect_standard <trim prefix="(" suffix=")" su…
自增长主键 --首先建一个表TEST create table TEST(  NID int PRIMARY KEY,  test1 varchar2(20),  test2 varchar2(20),  test3 varchar2(20),  test4 varchar2(20),  test5 varchar2(20)) -- 再建一个序列SEQ_TESTcreate sequence SEQ_TESTminvalue 1        --最小值nomaxvalue        --不…
postgresql不支持last_insert_id()方法,恶心到啦: 不过还好它有其他的解决方案: 创建一个测试数据表: CREATE TABLE test.test18 ( id serial NOT NULL, ddd character varying ) 一.先过去不重复的主键id,然后再插入 获取他的Sequence,select nextval('test.test18_id_seq'),然后再插入即可! 二.返回主键id insert into test.test18 (dd…
在myBatis中获取刚刚插入的数据的主键id是比较容易的 , 一般来说下面的一句话就可以搞定了 , 网上也有很多相关资料去查. @Options(useGeneratedKeys = true, keyProperty = "money_record_id") 但是相比较 , 批量插入数据时获取相数据的主键Id就会变得非常难了 , 上面的办法是没用的 . 可以按照如下办法去解决 : 1.新建一个sql如下 , 在一个事务中 , 可以通过如下sql获取到批量插入的数据的第一条数据的主键…