gpt4 book ai didi

MySQL生产库Insert了2次同样的记录但是主键ID是不一样的问题的分析过程

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章MySQL生产库Insert了2次同样的记录但是主键ID是不一样的问题的分析过程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Email里面收到朋友laopan的求助 。

laopan

insert into HudsonResult(JobID,EnvironmentID,FirstSessionID,RerunSessionID,State,Desp,OtherInfo) values 。

((select ID from Hudson where Stream='A7510_R52_Integration' and State='N' and pakName='needCompile' and User='jinhaiz'),0,'N','N','N','smoke_test','') 。

如果相同的记录不存在就执行上面这条insert命令,防止执行是insert两次.

这个语句该怎么写?

能明白不?

现在有个问题就是insert了2次同样的记录但是主键ID是不一样的.

me

如果是mysql数据库的话:

1 如果你表中有唯一健的话,可以通过这个唯一健来进行赛选的.

2 如果没有唯一健的话,你需要有判断数据是否重复的条件,根据这个条件先select出来,看是否存在,如果不存在就insert,如果存在要么覆盖要么就忽略掉不执行,这个过程需要多条sql语句,最好开启事务来进行控制.

Mysql中有一个replace以及Insert into ..... on duplicate key update 来判断对重复数据进行insert或者update的,但是这是依据主健或者唯一健来判断的。你可以参考下下面这篇文章.

laopan

1.唯一键怎么筛选?现在的问题是唯一的不同是key不一样,别的列都是一样的.

me

把表结构发给我,我看看 , 通过执行 命令 show create table HudsonResult; 可以得出表结构.

如果没有唯一健的话,就不能从sql层面去判断数据的唯一性,否则资源消耗太大了。需要从应用角度数据来源角度去验证过滤.

laopan

mysql> show create table HudsonResult,

+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 。

| Table | Create Table 。

+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 。

| HudsonResult | CREATE TABLE `HudsonResult` ( 。

`JobID` int(32) NOT NULL.

`EnvironmentID` int(32) NOT NULL.

`FirstSessionID` varchar(100) default NULL.

`RerunSessionID` varchar(100) default NULL.

`State` varchar(5) default NULL.

`ID` int(32) NOT NULL auto_increment.

`Desp` varchar(100) default NULL.

`ExecNum` int(32) default NULL.

`FailNum` int(32) default NULL.

`ATCStartTime` datetime default NULL.

`ATCEndTime` datetime default NULL.

`FocNumBefore` int(32) default '0'.

`FocNumAfter` int(32) default '0'.

`Priority` int(32) default '0'.

`FocDesp` varchar(5000) default ''.

`OtherInfo` varchar(100) default NULL.

PRIMARY KEY (`ID`) 。

) ENGINE=MyISAM AUTO_INCREMENT=14910 DEFAULT CHARSET=latin1 | 。

+--------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 。

1 row in set (0.00 sec) 。

现在的问题背景是这样的,网页上insert后,电脑卡了一下,这个时候还没有返回,又点了一下,变成又insert了一次,导致2条记录 。

内容是一样的,但是主键是不一样的,java你也做过,有没有啥想法,避免这个?

ME

把提交按钮做下处理,很简单的,提交一次后,按纽设置为灰色的,操作者点击不了,只有等待提交处理结果出来继续进行下一步操作.

laopan

搞定了,呵呵,简单易用哈,考虑多了,谢啦.

总结:可见有很多时候错误数据都是由于应用的bug导致的,清理数据的同时要从根源处理问题,数据层面的sql能不动尽量不要动.

最后此篇关于MySQL生产库Insert了2次同样的记录但是主键ID是不一样的问题的分析过程的文章就讲到这里了,如果你想了解更多关于MySQL生产库Insert了2次同样的记录但是主键ID是不一样的问题的分析过程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com