解决mysql插入数字都变成2147483647的方法 Duplicate entry ‘2147483647‘ for key ‘PRIMARY‘ 详解mysql的数据类型
这里写目录标题
- 问题
- 分析问题
- 详解mysql数据类型
- 整型(xxxint)
- 浮点型(float和double)
- 定点数(decimal)
- 字符串(char,varchar,xxxtext)
- 二进制数据(xxxBlob)
- 日期时间类型(date,time,datetime,timestamp)
- 数据类型的属性
- 解决问题
- 总结
问题
今天使用mybatis开发,在向manager表中添加数据时,遇到了这样的问题:
SQL: insert into manager (name, mobile, franchiseeId, userId,roleCategory, status,createTime, updateTime) values (?, ?,?, ?,?, ?,?, ?)Cause: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '2147483647' for key 'PRIMARY';
分析问题
Duplicate entry '2147483647' for key 'PRIMARY'
翻译成中文就是主键重复了
于是,查询数据表中是否存有id=2147483647
的记录,发现存在这条记录。
id = 2147483647
,为什么就无法插入数据呢?我们不得不去考虑mysql的数据类型。
详解mysql数据类型
整型(xxxint)
tinyint(m) 1个字节表示(-128~127)
smallint(m) 2个字节表示(-32768~32767)
mediumint(m) 3个字节表示(-8388608~8388607)
int(m) 4个字节表示(-2147483648~2147483647)
bigint(m) 8个字节表示(±9.22*10的18次方)
id = 2147483647
正好达到了int(m)
最大值,而我们数据表的id的字段类型
正好是int类型
,因而,无法继续写入数据了。
但我们的数据量不大,不至于会达到最大值,是不是数据库做了什么更改,在下文会继续分析。
浮点型(float和double)
float(m,d) 单精度浮点型,8位精度(4字节),m是十进制数字的总个数,d是小数点后面的数字个数
double(m,d) 双精度浮点型,16位精度(8字节)
参数m只影响显示效果,不影响精度,d却不同,会影响到精度。比如设一个字段定义
定点数(decimal)
decimal(m,d)定点类型浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。
参数m是定点类型数字的最大个数(精度),范围为0~65
,d小数点右侧数字的个数,范围为0~30
,但不得超过m。
对定点数的计算能精确到65位数字。
字符串(char,varchar,xxxtext)
char(n) 固定长度的字符串,最多255个字符
varchar(n) 固定长度的字符串,最多65535个字符
tinytext 可变长度字符串,最多255个字符
text 可变长度字符串,最多65535个字符
mediumtext 可变长度字符串,最多2的24次方-1个字符
longtext 可变长度字符串,最多2的32次方-1个字符
二进制数据(xxxBlob)
XXXBLOB
相对于xxxtext
来说的。
他们的存储方式不同,xxxTEXT
是以文本方式存储的,如果存储英文的话区分大小写,而xxxBlob
是以二进制方式存储的,不区分大小写。
xxxBlob
存储的数据只能整体读出。
xxxTEXT
可以指定字符集,xxxblob
不用指定字符集。
日期时间类型(date,time,datetime,timestamp)
date 日期’2008-12-2’
time 时间’12:25:36’
datetime 日期时间’2008-12-2 22:06:44’
timestamp 不固定
timestamp比较特殊,如果定义字段的类型为timestamp,这个字段的时间会在其他字段修改的时候自动刷新。所以这个数据类型的字段可以存放这条记录最后被修改的时间,而不是真正来存放时间。
数据类型的属性
NULL 数据列可包含NULL值
NOT NULL 数据列不允许包含NULL值
DEFAULT xxx 默认值,如果插入记录的时候没有指定值,将取这个默认值
PRIMARY KEY 主键
AUTO_INCREMENT 递增,如果插入记录的时候没有指定值,则在上一条记录的值上加1,仅适用于整数类型
UNSIGNED 无符号
CHARACTER SET name 指定一个字符集
解决问题
上文中也提到了id达到了最大值,但为什么会达到最大值呢?
于是,查询这个id的上条记录的id=400
,但manager表是自动增加的,因而,这条记录应该是 id = 401
。
通过上面的分析,只能是MySQL的配置问题,有可能是 auto Increment = 2147483647
,于是,去查看manager表的配置:
果然是配置的问题,可能其他研发人员误操作,修改auto increment
的值,于是,把该值修改为401,auto increment ,实际上是随着表中的id的改变而自动改变的。**
总结
经过这个问题,学习了mysql的数据类型。
你学废了mysql的数据类型吗?
解决mysql插入数字都变成2147483647的方法 Duplicate entry ‘2147483647‘ for key ‘PRIMARY‘ 详解mysql的数据类型相关推荐
- MySql插入数据时错误Duplicate entry '131' for key 'PRIMARY'
今天在进行开发的过程中,遇到MySQL数据库插入数据时抛出异常: Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViol ...
- 关于逆向工程,解决mysql数据库遇到的1406问题,ERROR 1062 (23000): Duplicate entry '0' for key 'PRIMARY'
先说逆向过程,先是在PowerDesginer这个软件上生成数据表,然后生成sql脚本, 生成sql脚本: 然后在命令行进行数据生成. 1.连接mysql数据库 2.use 数据库(其中一个空数据库) ...
- mysql报错:Duplicate entry ‘xx‘ for key ‘PRIMARY‘ 解决可行方案。已解决
mysql报错:Duplicate entry 'xx' for key 'xxux1' 解决可行方案.已解决 web开发多次遇到Duplicate entry 'xx' for key 'PRIMA ...
- MySQL ALTER TABLE报错Duplicate entry 'xxx' for key 'PRIMARY'解决方法
在MySQL中执行加字段等操作时可能会报Duplicate entry 'xxx' for key 'PRIMARY'的错,例如: mysql> alter table test add aa ...
- 利用navicat向mysql数据库导入数据时出现1062 - Duplicate entry '0' for key 'PRIMARY'错误的解决办法
1062 - Duplicate entry '0' for key 'PRIMARY',明明导入的数据值不一样,但错误提示主键已存在,不能插入.不知道为什么有些数据插入不成功,原因我也不知道. 解决 ...
- mysql #1062 –Duplicate entry '1' for key 'PRIMARY'
把数据从一个机器上导到另外一个机器上,因此记录太多,刚开始没注意,超过了phpmyadmin的限制,提示出错了,我把文件手动的给分成一些小文件,可是再导就提示#1062 - Duplicate ent ...
- 【数据库-MySql】[Err] 1062 - Duplicate entry '1-1' for key 'PRIMARY'
背景 在Mysql转存过程中使用以下SQL语句,出现Err 1062的报错. INSERT INTO dbbackup.tb1 SELECT* FROMtb1 主键或联合主键对应的数据已存在. [Er ...
- 使用Navicat插入数据时报错1062 - Duplicate entry ‘menu544073941‘ for key ‘PRIMARY‘
-> 报错: 1062 - Duplicate entry 'menu544073941' for key 'PRIMARY' -> 原因:数据库表在设计时,没有设置id主键自增,而要插入 ...
- MySQL中出现Duplicate entry 'XXX' for key 'PRIMARY'解决方案
首先我们用MySQL自带的可视化管理工具MySQL WorkBench打开数据库及表格,出现此问题的主要原因是主键已经有了名为"XXX"的那项,实际上我写的代码并没有重复也会弹出此 ...
最新文章
- 选型必看:RabbitMQ 七战 Kafka,差异立现
- 第二章 序列比对——Needleman-Wunsch全局比对
- ASP.NET Web API WebHost宿主环境中管道、路由
- MODE —— 输入一个数字,求从1加到该数的和(知识点:for循环嵌套while循环)
- asp.net服务器控件与html服务器控件的区别
- case....when ...多重判断
- Linux进程间通信二 System V 消息队列简介与示例
- Burp Suite安装配置
- Head First JSP---随笔八(传统标记)
- gpio能测Linux启动时间,linux – 如何自动测量新建图像的启动时间...
- nvinfer1::cudnn::Engine::deserialize()出错的原因
- 【AD】Altium Designer PCB文件的绘制(上篇:PCB基础和布局)
- 谷歌Chrome浏览器保存网页为PDF
- 利用SQL求中位数(已修复BUG)
- 08.15恒指/德指做单思路导图及晚盘前瞻
- 自动驾驶 4-5 自行车模型的横向动力学 Lateral Dynamics of Bicycle Model
- 【3分钟速读】那些你苦苦搜索的模板,是这么被捣腾出来的
- Xposed 模块编写
- 电子元器件品牌及其代理商
- JavaWeb—静态网页HTML
热门文章
- mac命令行配置代理服务器_如何在Mac上配置代理服务器
- 关于quotename的用法
- 2022广东省焊工(初级)考试题模拟考试题库及模拟考试
- BCrypt加密算法
- 制作网站的缩略logo标志
- 【高效开发工具系列】Windows 修改 host 文件
- ListView之多种类型Item
- C# List AddRange Concat Value cannot be null. (Parameter ‘collection‘)
- 倪文迪陪你学蓝桥杯2021寒假每日一题:1.26日(2019省赛A组第4题)
- 使用桥接网络的jslinux