[問題] mysql重覆輸入同一筆資料

作者: sinlin (豆漿)   2022-03-11 11:30:54
$query = "SELECT * FROM qy WHERE i = ".$i."" AND date(date) = CURDATE();
$result = mysqli_query($dbc, $query)
$row = mysqli_num_rows($result);
if($row!=0){
...略(delete or update)...
}
else{
if($qy != ''&& $qy != '0'){
$query = "INSERT INTO qy(i, qy)VALUES('".$i."','".$qy."')";
}
}
如上
我現在有變數$i, $qy需要輸入進名為qy的table
我的php查詢mysql裡面一筆資料如果查不到$row=0
就INSERT一筆新的資料$i和$qy
如果$row!=0, qy=0就做DELETE $i和$qy
$row!=0, qy!=0就做UPDATE $i和$qy
這樣使用了幾個月都沒問題
昨天突然出了一個問題
輸入了一筆資料結果table內變成兩筆
例如輸入$i=2, $qy=5
結果出現兩筆而且兩筆時間只間隔了兩分鐘
我的問題是
mysql有可能會因為網路lag,按了兩次submit
會判定成兩次$row=0做兩次INSERT嗎?
作者: timsheu (為道日損)   2022-03-11 12:37:00
沒有pk或index?
作者: kyoe (緣份‧不再)   2022-03-11 14:51:00
通常lag的問題不會間隔長到兩分鐘, 大多毫秒差才是
作者: iamdco (DC)   2022-03-11 17:01:00
你撈一下 i 應該有重複的,因為 i 不是唯一值。後面的條件AND date(date) = CURDATE()會撈不出重複的 i
作者: superzack2 (雞排)   2022-03-12 00:58:00
把i跟date設複合唯一索引就不會有同一天重複的i了
作者: darkguy (riven)   2022-03-13 19:23:00
你這樣寫併發一定重複….你要直接用一個欄位int 當日期+i 20220301之類 創建時間歸創建timestamp
作者: kyoe (緣份‧不再)   2022-03-22 09:10:00
試著用 transaction 寫寫看, 有可能是中間update有問題?

Links booklink

Contact Us: admin [ a t ] ucptt.com