我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Insert为0的记录导致数据混乱该怎么办

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Insert为0的记录导致数据混乱该怎么办

Insert为0的记录导致数据混乱该怎么办,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。


环境.MySQL 5.6.14
SQL_Mode:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

生产环境 配置表,设置主键为自增.
一天某同学让我帮忙从测试导一批数据到生产.
虽然我对这种方式深恶痛绝,但是没有办法..也只能照做.
导入之后的第二天,业务发现很多生产数据错乱了。
这个礼物的配置表,主键原本设计成自增主键.
但是后来他们用0表示一种特殊礼物...坑就在这里了。

过程模拟

  1. drop table if exists config_gift;

  2. create table config_gift(

  3.     GiftID int not null primary key auto_increment,

  4.     GiftName varchar(32) not null

  5. ) auto_increment=50000;


  6. insert into config_gift(GiftName) select '鲜花';

  7. insert into config_gift(GiftName) select '鞭炮';

  8. insert into config_gift(GiftName) select '福袋';



  9. select * from config_gift;

当时的SQL_Mode是:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION

如果这时执行如下的语句,
insert into config_gift select 0,'蛋糕';
insert into config_gift select null,'香水';

查看结果竟然如下:
Insert为0的记录导致数据混乱该怎么办

MySQL 如果已经设置了主键自动增长,但是后来却 插入 0 或者 null 作为主键值的话, MySQL会用自增长的值,取代原本的 0 或者 null 。

业务代码中写死了 0 这个礼物ID的判断,所以导致了大量数据错乱,花了很长时间修正.

这种事情猝不及防
业务方定的这个特殊礼物就用0表示,而且也没有人来通知数据库...
数据上线的时候,都是一批数据,人力甄别数据似乎也不现实.

改SQL_mode保平安吧.

在自增主键下,处理主键为0的数据
set @@session.sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,no_auto_value_on_zero'


修改Global和Session级别的SQL_mode之后,主键为0的礼物可以正确插入了。
Insert为0的记录导致数据混乱该怎么办

主要注意的是,即使在这个SQL_mode下(STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,no_auto_value_on_zero)

自增主键,Insert主键为null的数据,还是会使用自增主键的值作为主键,而不是报错。

关于Insert为0的记录导致数据混乱该怎么办问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Insert为0的记录导致数据混乱该怎么办

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

目录