简单代码的mysql写记录的问题
时间:2008-07-10
来源:互联网
PHP代码:
if($name){
$sql5="select id from count where name = '".$name."' and date = '".$nowdate."'";
$query5 = mysql_query($sql5);
$rs5 = mysql_fetch_array($query5);
if(isset($rs5) && $rs5!="")
{
$sql6="UPDATE count SET
count = count+1
WHERE id = ".$rs5[0]."";
$result6=mysql_query($sql6);
}else
{
$sql6="insert into count (name,count,date) values ('".$name."', count+1,'".$nowdate."')";
$ruselt7=mysql_query($sql6);
}
}
每天总会有这样的两行重复的记录:
id name count date number
55 mp3 111 2008-07-09 162
54 mp3 1 2008-07-09 162
原理上来说name 和date 应该是不会重复的,但是总会多出一条记录,而且count都是1 ,.本人对MYSQL的机制不是很了解,望高人解答。
[ 本帖最后由 zhengdl126 于 2008-7-10 11:50 编辑 ]
作者: zhengdl126 发布时间: 2008-07-09
你的另外一个程序段中应该也有一句insert这样的代码。
作者: coolstr 发布时间: 2008-07-09
PHP代码:
$sql8="select id from day_count where name = '".$name."' and date = '".$nowdate."' and username = '".$user_name."' ";$query8 = mysql_query($sql8);
$rs8 = mysql_fetch_array($query8);
if(!$rs8)
{
$sql9="insert into day_count (name,username,date) values ('".$name."', '".$user_name."','".$nowdate."')";
$ruselt9=mysql_query($sql9);
$sql10="UPDATE count SET number = number+1 where name = '".$name."' and date = '".$nowdate."' ";
$result10=mysql_query($sql10);
}
我检查了一下,之有这两处操作count表了,没有其他地方,问题好像还是出现在第一处代码那里。
作者: zhengdl126 发布时间: 2008-07-10
表示插入这条数据,但是当要插入的数据的KEY已经存在的话,执行UPDATE后面的更新操作
作者: leric 发布时间: 2008-07-10
作者: zhengdl126 发布时间: 2008-07-11
引用:
原帖由 leric 于 2008-7-10 13:49 发表这种情况用INSERT INTO *** ON DUPLICATE KEY UPDATE number=number+1 这种语法,一条查询就够了
表示插入这条数据,但是当要插入的数据的KEY已经存在的话,执行UPDATE后面的更新操作
作者: xieaotian 发布时间: 2008-07-11
后面的count+1的count有值吗?如果没有值的话直接写1就是了,奇怪的是你这样写insert语句竟然不报错,一个字:服!
作者: 天之林 发布时间: 2008-07-12
下面是我测试的代码,好像不对
PHP代码:
$sql="INSERT INTO acs_count (flash_name,count,date,number) VALUES('".$_REQUEST["name"]."',1,'".date("Y-m-d",time())."',1) ON DUPLICATE KEY UPDATE count=count+1";作者: zhengdl126 发布时间: 2008-07-16
估计是某些地方insert的时候判断没有作对。
作者: devotedsky 发布时间: 2008-07-16
54 mp3 1 2008-07-09 162
这样重复的记录总是出现,每天都有,不明白是怎么出现这样的奇怪的记录的 ?
作者: zhengdl126 发布时间: 2008-07-16
作者: devotedsky 发布时间: 2008-07-16
作者: zhengdl126 发布时间: 2008-07-18
767--mp3--1--2008-07-22--0--2008-07-22 00:00:25
766--mp3--1--2008-07-22--0--2008-07-22 00:00:25
也就是说在新的一天,有两个同时操作MP3的记录,所以新增了两条记录。
是不是要用到锁表之类的操作MYSQL?
我在操作表的时候加上了
$sql_l = "LOCK TABLES acs_count WRITE";
$query_l = mysql_query($sql_l);
和
$sql_u = "UNLOCK TABLES";
$query_u = mysql_query($sql_u);
然后查看了表记录update是没有问题,不知道还会不会有并发插入的问题 。
[ 本帖最后由 zhengdl126 于 2008-7-22 10:45 编辑 ]
作者: zhengdl126 发布时间: 2008-07-22
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28