> select * from cnt_tbl;
+------------+-----+
| date | cnt |
+------------+-----+
| 20120101 | 10 |
| 20120102 | 10 |
+------------+-----+
# 코드부분.
$sql = "UPDATE cnt_tbl SET cnt = cnt-1 WHERE date = '$date' AND cnt > 0";
$this->result = $this->query($query);
$row = $this->affected_rows($query);
if($row)
{
$sql = "
INSERT INTO user_tbl
VALUES('', '$user_id', '$user_nm', '$user_ip', '$date')
";
$this->result = $this->query($sql);
}else{
return CNT_FULL;
}
cnt_tbl에 cnt값으로 10이 들어있고, 제가 의도한 것은
cnt_tbl의 cnt를 -1씩 시켜주면서 user_tbl에 유저 정보를 입력하는 것입니다.
결론적으로 user_tbl에는 10명의 유저만 입력이 되겠지요.
그런데 부하가 많이 몰려오니까 cnt_tbl에는 0이 되었어도, user테이블에는 10보다 많은 값이 insert 되더라구요.
주변 분들의 말로는 부하가 몰리면 그럴 수 있다는데 전 잘 이해가 되지 않아서요.
이럴 경우 변수에 ROW_COUNT를 넣어주고, insert문에 where절로 @변수 > 0 으로 주면 문제가 되지 않는다는데,
이 둘의 차이가 무엇인지.....
이 둘의 차이가 뭐고 왜 두 번째 방식이 명확한지 알려주세요.^^
(또한, 혹시 위의 코드에 문제가 있다면 그것도요..미리 감사드립니다.)
|