MySQL臨盆庫Insert了2次異樣的記載然則主鍵ID是紛歧樣的成績的剖析進程。本站提示廣大學習愛好者:(MySQL臨盆庫Insert了2次異樣的記載然則主鍵ID是紛歧樣的成績的剖析進程)文章只能為提供參考,不一定能成為您想要的結果。以下是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的,然則這是根據主健或許獨一健來斷定的。你可以參考下上面這篇文章(http://www.jb51.net/article/47090.htm)。
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能不動盡可能不要動。