程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL臨盆庫Insert了2次異樣的記載然則主鍵ID是紛歧樣的成績的剖析進程

MySQL臨盆庫Insert了2次異樣的記載然則主鍵ID是紛歧樣的成績的剖析進程

編輯:MySQL綜合教程

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved