站长网 MySql教程 Insert为0的记录导致数据混乱应当怎么办

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

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

Insert为0的记录导致数据混乱该怎么办,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
 
 
环境.MySQL 5.6.14
SQL_Mode:STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
 
生产环境 配置表,设置主键为自增.
一天某同学让我帮忙从测试导一批数据到生产.
虽然我对这种方式深恶痛绝,但是没有办法..也只能照做.
导入之后的第二天,业务发现很多生产数据错乱了。
这个礼物的配置表,主键原本设计成自增主键.
但是后来他们用0表示一种特殊礼物…坑就在这里了。
 
过程模拟
 
 
drop table if exists config_gift;
create table config_gift(
    GiftID int not null primary key auto_increment,
    GiftName varchar(32) not null
) auto_increment=50000;
insert into config_gift(GiftName) select '鲜花';
insert into config_gift(GiftName) select '鞭炮';
insert into config_gift(GiftName) select '福袋';
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表示,而且也没有人来通知数据库…
数据上线的时候,都是一批数据,人力甄别数据似乎也不现实.
 
在自增主键下,处理主键为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的记录导致数据混乱该怎么办问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/jc/mysql/2021/1218/40592.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部