主键的值重复 Duplicate entry '4294967295' for key 'PRIMARY'
今天erp调用商城的商品推送接口, 给商城推送商品
(推送提交的参数如下)
{
"products": [
{
"createTime": "2018-02-07 12:04:07",
"name": "文和测试",
"productCode": "8294967296",
"productId": 8294967296,
}
]
}
结果返回错误 “主键的值重复”
Duplicate entry '4294967295' for key 'PRIMARY'
一查数据库发现 是 product_id的长度超了 ,数据库里的 product_id 字段设置的都是 自增 int 类型的, product表里的 product_id 自增的值已经到了 4294967295 了到了最大值了, 而 product_id 等于 8294967296 超过了int 的长度 所以提示 “主键的值重复”。
插个队
int(11) 和int(3) 存储的值的最终大小是一样的,这个3和11 是在终端显示的时候数字长度,和存储数字大小和长度无关
11万的数据,主键应该不是步长加1,或者id也可能不是自增0开始的。
主键的值重复,那就先去数据库找找这条记录,然后再看看 10多万的数据,怎么主键到了4294967295
2的32次方=4294967296(无符号),带符号再除以2,负数比正数多一个,-2147483648~+2147483647 int型无符号 4294967296 最大值
erp的同学说 erp里的product_id都是10多位数的, 商城还得改一下 product_id的数据类型,得改成 bigint,去数据库里搜了一下发现有 50多个表都有 字段 product_id ,这要是一个一个的改, 那麻烦了
甭愁有简便的办法 , 写个sql 来生成 alter 语句
select concat('alter table ', table_name, ' modify ', column_name, ' bigint') from information_schema.columns where table_schema = 'shop_ceshi' and column_name = 'product_id';
执行结果:
alter table shop_product modify product_id bigint ;
alter table shop_product_attr_index modify product_id bigint;
#......
alter table shop_product_browse modify product_id bigint;
然后复制执行结果, 执行, 成功,咋样这简便不
(。・v・。)
喜欢这篇文章吗?欢迎分享到你的微博、QQ群,并关注我们的微博,谢谢支持。