千家信息网

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

发表于:2024-11-27 作者:千家信息网编辑
千家信息网最后更新 2024年11月27日,Insert为0的记录导致数据混乱该怎么办,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。环境.MySQL 5.6.14SQL_Mod
千家信息网最后更新 2024年11月27日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,'香水';

查看结果竟然如下:


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的礼物可以正确插入了。


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

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

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

数据 礼物 业务 问题 生产 混乱 怎么办 特殊 错乱 原本 更多 环境 增长 帮助 解答 配置 易行 深恶痛绝 猝不及防 简单易行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 江苏在线网络技术咨询常见问题 sql还原数据库改文件名 阿里云国际服务器多少钱一年 云服务器可以搭建传奇服务器吗 信息技术数据库是什么 梦幻西游云梦生花服务器怎么样 portal是哪里的服务器 网页显示服务器连接异常 战地一服务器续费方法 优类客网络技术 阿里云购买服务器流程 党组网络安全工作制度 贵州时间同步服务器云主机 加强网络安全建设 为实现 惠普服务器电源可调 设备软件开发要学什么软件 软件开发项目竞标ppt模板 服务器主机插上无法开机 发生网络安全事件应当什么 杨浦区个人数据库服务销售 检测不到服务器硬盘 数据库迁移dsg 求个我的世界服务器 重庆android软件开发 建立一个学生与老师的数据库 学编程先学数据库还是学语言 u8c 客商数据库 软件开发企业6%是否退3 网络安全方面的短片 怎么删掉同名数据库
0