《Mysql學習MySQL生產庫Insert了2次同樣的記錄但是主鍵ID是不一樣的問題的分析過程》要點:
本文介紹了Mysql學習MySQL生產庫Insert了2次同樣的記錄但是主鍵ID是不一樣的問題的分析過程,希望對您有用。如果有疑問,可以聯系我們。
Email里面收到朋友laopan的求助MYSQL學習
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兩次.
這個語句該怎么寫?MYSQL學習
能明白不?
現在有個問題便是insert了2次同樣的記錄但是主鍵ID是不一樣的.MYSQL學習
me :
如果是mysql數據庫的話:MYSQL學習
1 如果你表中有唯一健的話,可以通過這個唯一健來進行賽選的.
2 如果沒有唯一健的話,你必要有判斷數據是否重復的條件,根據這個條件先select出來,看是否存在,如果不存在就insert,如果存在要么覆蓋要么就忽略掉不執行,這個過程必要多條sql語句,最好開啟事務來進行控制.MYSQL學習
Mysql中有一個replace以及Insert into ..... on duplicate key update 來判斷對重復數據進行insert或者update的,但是這是依據主健或者唯一健來判斷的.你可以參考下下面這篇文章(/article/47090.htm).
laopan:
1.唯一鍵怎么篩選?現在的問題是唯一的不同是key不一樣,其余列都是一樣的.MYSQL學習
me :
把表結構發給我,我看看 , 通過執行 命令? show create table HudsonResult;? 可以得出表結構.
如果沒有唯一健的話,就不能從sql層面去判斷數據的唯一性,否則資源消耗太大了.必要從應用角度數據來源角度去驗證過濾.MYSQL學習
laopan:MYSQL學習
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)MYSQL學習
現在的問題配景是這樣的,網頁上insert后,電腦卡了一下,這個時候還沒有返回,又點了一下,變成又insert了一次,導致2條記錄
內容是一樣的,但是主鍵是不一樣的,java你也做過,有沒有啥想法,避免這個?MYSQL學習
ME :
把提交按鈕做下處理,很簡單的,提交一次后,按紐設置為灰色的,操作者點擊不了,只有等待提交處理結果出來繼續進行下一步操作.MYSQL學習
laopan:MYSQL學習
搞定了,呵呵,簡單易用哈,考慮多了,謝啦.MYSQL學習
總結:可見有很多時候差錯數據都是由于應用的bug導致的,清理數據的同時要從根源處理問題,數據層面的sql能不動盡量不要動.MYSQL學習
《Mysql學習MySQL生產庫Insert了2次同樣的記錄但是主鍵ID是不一樣的問題的分析過程》是否對您有啟發,歡迎查看更多與《Mysql學習MySQL生產庫Insert了2次同樣的記錄但是主鍵ID是不一樣的問題的分析過程》相關教程,學精學透。維易PHP學院為您提供精彩教程。