bigint

杂谈自增主键用完了怎么办

给你一囗甜甜゛ 提交于 2020-02-25 15:11:33
原文: 杂谈自增主键用完了怎么办 引言 在面试中,大家应该经历过如下场景 面试官:"用过mysql吧,你们是用自增主键还是UUID?" 你:"用的是自增主键" 面试官:"为什么是自增主键?" 你:"因为采用自增主键,数据在物理结构上是顺序存储,性能最好,blabla..." 面试官:"那自增主键达到最大值了,用完了怎么办?" 你:"what,没复习啊!!" (然后,你就可以回去等通知了!) 这个问题是一个粉丝给我提的,我觉得挺有 意(KENG)思(B)! 于是,今天我们就来谈一谈,这个自增主键用完了该怎么办! 正文 简单版 我们先明白一点,在mysql中,Int整型的范围如下 类型 最小值 最大值 存储大小 Int(有符号) -2147483648 2147483648 4 bytes Int(无符号) 0 4294967295 4 bytes 我们以无符号整型为例,存储范围为0~4294967295,约43亿!我们先说一下,一旦自增id达到最大值,此时数据继续插入是会报一个主键冲突异常如下所示 //Duplicate entry '4294967295' for key 'PRIMARY' 那解决方法也是很简单的,将Int类型改为BigInt类型,BigInt的范围如下 类型 最小值 最大值 存储大小 BigInt(有符号) -9223372036854775808

Mybatis foreach

China☆狼群 提交于 2020-02-09 09:56:02
批量删除: <delete id= "deleteBatchByXXX" parameterType= "list"> delete from 表名 where groupon_id in <foreach collection="list" item= "item" index ="index" open= "(" close =")" separator=","> #{item} </foreach > </delete > 注意,foreach是循环,用来读取传入的list参数。批量处理是parameterType的类型必须要注意。foreach标签中的collection属性表示传入的是什么集合类型。item表示的是集合中的一个量类似于 List<String>list; for(String str:list){ …… } item就相当于str的作用,用来遍历collection。index就是集合的索引。open表示标签以什么开始,close表示标签以什么结束。seprator表示元素之间的间隔。 批量插入: <insert id="insertBatch" > insert into 表名 ( uid, groupon_id, create_time, receive_time) values <foreach collection="list" item=

mysql中毫秒的保存类型

只愿长相守 提交于 2020-02-06 05:41:23
13位时间戳存储要么存为bigint,要么存为varchar(13)类型。不能使用int,因为“13位时间戳只能存bigint ,因为13位时间戳超出了int的范围”。 13位时间戳只能存bigint ,因为13位时间戳超出了int的范围。 注: https://blog.csdn.net/helloxiaozhe/article/details/83269152 来源: CSDN 作者: l_degege 链接: https://blog.csdn.net/l_degege/article/details/104187163

springboot mybatis查询对象驼峰字段为空的问题

为君一笑 提交于 2020-02-04 16:49:40
返回的对象不为null,但是属性值为null 代码如下: <resultMap id="BaseResultMap" type="com.xxx.xxx.dao.model.MerchantUser"> <id column="MU_ID" jdbcType="BIGINT" property="muId"/> <result column="USER_ID" jdbcType="BIGINT" property="userId"/> <result column="MERCHANT_NO" jdbcType="VARCHAR" property="merchantNo"/> <result column="USER_PHONE" jdbcType="VARCHAR" property="userPhone"/> <result column="GRANTED" jdbcType="VARCHAR" property="granted"/> <result column="CREATE_DATE" jdbcType="TIMESTAMP" property="createDate"/> <result column="MERCHANT_USER_ID" jdbcType="VARCHAR" property="merchantUserId"/> <result column=

三级数据库知识点学习(二)

本小妞迷上赌 提交于 2020-01-18 17:28:15
文章目录 一、E-R图 二、概念数据模型 三、B/S结构的数据库应用系统 四、函数依赖 五、smallint 六、内嵌表值函数 七、锁 八、建立索引(补充) 九、分布式数据库(补充) 十、OLTP和OLAP 1.OLTP 2.OLAP 一、E-R图 E-R图 ,即实体联系图。这里仅简单介绍E-R图中的概念和一些简单的E-R图。 E-R图由四个部分组成,分别为 实体:使用矩形框表示,在矩形框中记入实体名称。 联系:使用菱形框表示,在菱形框中记入联系名称,并用实线与实体连接起来。 属性:使用圆形框表示,在圆形框中记入属性名称,实体和联系皆可有属性。 连线:实体与属性之间;实体与联系之间;联系与属性之间用直线相连,并在直线上标注联系的类型。(对于一对一联系,要在两个实体连线方向各写1; 对于一对多联系,要在一的一方写1,多的一方写N;对于多对多关系,则要在两个实体连线方向各写N,M。) 在E-R图中存在三种一般性约束,分别为一对一约束、一对多约束和多对多约束。 一对一约束(1:1) 其中实体家庭教师(姓名,教龄)和学生(姓名,年龄)之间的教学联系是1:1的联系,即家庭教师与学生进行一对一教学。 一对多约束(1:n) 其中实体教师(教师号,姓名,教龄)和学生(学号,姓名)之间的教学联系是1:n的联系,即一位教师可以教多位学生。 多对多约束(n:n) 其中实体学生(学号,姓名)与活动(名称

[Err] ERROR: invalid input syntax for integer: "1.0"

独自空忆成欢 提交于 2020-01-18 00:27:13
一、问题描述 在执行查询操作时,报了这个错误,通过分析,不是sql语句语法错误,如果是sql语法错误,就会报哪一行有问题,这个一看就是查询PostgreSQL数据类型搞错了,一个不是bigint类型的数据,数据库中保存的值为 1.0 .查询的时候让其作为bigint类型导致的。sql示例: select ( ext ->> 'weekly_outpatient_days' ) :: BIGINT AS weekly_outpatient_days from test 二、解决方案 拿到问题sql,查看哪些字段被定为bigint类型了,然后改成其他类型的,我改为numeric类型就顺利解决了。 select ( ext ->> 'weekly_outpatient_days' ) :: numeric AS weekly_outpatient_days from test 三、总结 出现这种问题的原因还是对PostgreSQL数据类型不了解。 1、数字类型如下 2、字符串类型如下: 3、一般整数类型用Integer或者bigint,高精度类型用 numeric,字符串类型用text,具体的细化请查询表格。有帮助的话,欢迎关注java基础笔记公众号。 来源: CSDN 作者: jiankang66 链接: https://blog.csdn.net/jiankang66/article

分库分表使用场景及设计方式

六月ゝ 毕业季﹏ 提交于 2020-01-13 04:39:40
一. 分表 场景:对于大型的互联网应用来说,数据库单表的记录行数可能达到千万级甚至是亿级,并且数据库面临着极高的并发访问。采用Master-Slave复制模式的MySQL架构, 只能够对数据库的读进行扩展,而对数据库的写入操作还是集中在Master上,并且单个Master挂载的Slave也不可能无限制多,Slave的数量受到Master能力和负载的限制。   因此,需要对数据库的吞吐能力进行进一步的扩展,以满足高并发访问与海量数据存储的需要!    对于访问极为频繁且数据量巨大的 单表(百万到千万级别) 来说,我们首先要做的就是减少单表的记录条数,以便减少数据查询所需要的时间,提高数据库的吞吐,这就是所谓的分表!   在分表之前,首先需要选择适当的分表策略,使得数据能够较为均衡地分不到多张表中,并且不影响正常的查询!   对于互联网企业来说, 大部分数据都是与用户关联的 ,因此, 用户id是最常用的分表字段 。因为大部分查询都需要带上用户id,这样既不影响查询,又能够使数据较为均衡地分布到各个表中(当然,有的场景也可能会出现冷热数据分布不均衡的情况),如下图:   假设有一张表记录用户购买信息的订单表order,由于order表记录条数太多,将被 拆分成256张表 。   拆分的记录根据 user_id%256 取得对应的表进行存储, 前台应用则根据对应的user_id%256

分表与分库使用场景以及设计方式

荒凉一梦 提交于 2020-01-12 07:30:12
一. 分表 场景:对于大型的互联网应用来说,数据库单表的记录行数可能达到千万级甚至是亿级,并且数据库面临着极高的并发访问。采用Master-Slave复制模式的MySQL架构, 只能够对数据库的读进行扩展,而对数据库的写入操作还是集中在Master上,并且单个Master挂载的Slave也不可能无限制多,Slave的数量受到Master能力和负载的限制。 因此,需要对数据库的吞吐能力进行进一步的扩展,以满足高并发访问与海量数据存储的需要! 对于访问极为频繁且数据量巨大的单表来说,我们首先要做的就是减少单表的记录条数,以便减少数据查询所需要的时间,提高数据库的吞吐,这就是所谓的分表! 在分表之前,首先需要选择适当的分表策略,使得数据能够较为均衡地分不到多张表中,并且不影响正常的查询! 对于互联网企业来说,大部分数据都是与用户关联的,因此,用户id是最常用的分表字段。因为大部分查询都需要带上用户id,这样既不影响查询,又能够使数据较为均衡地 分布到各个表中(当然,有的场景也可能会出现冷热数据分布不均衡的情况),如下图: 假设有一张表记录用户购买信息的订单表order,由于order表记录条数太多,将被拆分成256张表。 拆分的记录根据user_id%256取得对应的表进行存储,前台应用则根据对应的user_id%256,找到对应订单存储的表进行访问。 这样一来,user

mysql 数据库分表小实例

*爱你&永不变心* 提交于 2020-01-11 23:32:17
项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多。以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈。 当出现这种情况时,我们可以考虑分表,即将单个数据库表进行拆分,拆分成多个数据表,然后用户访问的时候,根据一定的算法,让用户访问不同的表,这样数据分散到多个数据表中,减少了单个数据表的访问压力。提升了数据库访问性能。 我们可以进行简单的设想:现在有一个表products存储产品信息,现在有100万用户在线访问,就要进行至少100万次请求,现在我们如果将它分成100个表即products0~~products99,那么利用一定的算法我们就分担了单个表的访问压力,每个表只有1万个请求(当然,这是理想情况下!) 实现mysql 分表的关键在于:设计良好的算法来确定"什么时候情况下访问什么(哪个)表"。 下面我们先来实现一个简单的mysql分表演示:这里使用MERGE分表法 1,创建一个完整表存储着所有的成员信息 create table member( id bigint auto_increment primary key, name varchar(20), sex tinyint not null default '0' )engine=myisam default charset=utf8 auto_increment=1;

Mysql 批量修改 multi-statement not allow解决

拈花ヽ惹草 提交于 2020-01-10 22:55:15
直接上代码(使用此方式,不需要进行任何数据库配置): update t_project_stage_cost_budget update_time = now(), when id = #{item.id,jdbcType=BIGINT} then #{item.personMonths} when id = #{item.id,jdbcType=BIGINT} then #{item.projectStageId} when id = #{item.id,jdbcType=BIGINT} then #{item.subjectCostId} id in #{item.id,jdbcType=BIGINT} 批量新增 insert into t_project_budget_submission( project_id, cost_catagory_id, subject_catagory_id, subject_cost_id, department_num_id, create_time, update_time ) values ( #{p.projectId,jdbcType=BIGINT}, #{p.costCatagoryId,jdbcType=INTEGER}, #{p.subjectCatagoryId,jdbcType=INTEGER}, #{p