[问题] 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