国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL生產庫Insert了2次同樣的記錄但是主鍵ID是不一樣的問題的分析過程

2024-07-24 13:05:26
字體:
來源:轉載
供稿:網友

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能不動盡量不要動。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桃园县| 勃利县| 栖霞市| 扎赉特旗| 雅安市| 宁化县| 巨鹿县| 永丰县| 延吉市| 渭源县| 宁晋县| 武安市| 大同市| 定襄县| 斗六市| 永善县| 宜丰县| 巴中市| 交口县| 砚山县| 临泉县| 葫芦岛市| 柳林县| 得荣县| 乐东| 河北省| 泰州市| 寻乌县| 许昌县| 克山县| 栾城县| 靖边县| 巴南区| 柳江县| 竹溪县| 额济纳旗| 鹰潭市| 新民市| 遂溪县| 临汾市| 白山市|