MYSQL数据库,老是被插入重复记录,怎么解决?(附代码)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MYSQL数据库,老是被插入重复记录,怎么解决?(附代码)相关的知识,希望对你有一定的参考价值。
本程序是站内搜索记录的插入,也设置了刷新时间,可是在同一时间内,老是被重复插入很多记录,不知道是不是用户搜索慢,使劲刷新导致的,我自己测试,也没出现重复N多记录啊,下面是代码,我也判断了重复,但是还是有重复。
$query = $DB->query("SELECT COUNT(*) FROM 表 WHERE keyword='".$keyword."'");
$total = $DB->result($query, 0);
if($total <= 0)
$DB->query("INSERT INTO 表 (keyword) VALUES ('".$keyword."');
else
$DB->unbuffered_query("UPDATE 表 SET count=count+1 WHERE keyword='".$keyword."'");
请给出具体代码哦,分不够可以加,谢谢
能否给出具体代码哦?还有就是这个站内搜索,同时又很多人搜索,如果锁定了表,对其他用户使用会不会有影响啊?
追答把下面的串(多行)作为unbuffered_query的参数,需要注意的是关于锁表和解锁的语法,不同数据库是有差别的,你应该查一下手册。
begin transaction
lock table 表
if ( select count(*) from 表 where keyword = '".$keyword."' ) = 0
INSERT INTO 表 (keyword) VALUES ('".$keyword."')
else
UPDATE 表 SET count=count+1 WHERE keyword='".$keyword."'
unlock table 表
commit transaction
同时又很多人搜索,如果锁定了表,对其他用户使用会不会有影响啊?
追答事务一旦执行完毕,就释放锁,可以接受其他用户的访问,理论上没有影响,因为逻辑的正确你还是要保证的。实际上应该会有些影响,但为了保证多用户的流畅体验,应通过提高服务器配置来达到,关注服务器的事务处理性能。
追问你给的代码我能直接用么?好像是不是php文件里能执行的
追答我不会PHP,意思是就执行一条命令,用数据库的事务机制解决你的问题。这个命令比较长,准确地说,是执行一个批,事务控制当然不会是简单的一条命令了。
参考技术A 1、可以设置执行时间,用cookie记录时间,比如1分钟之内只操作一次插入数据2、在执行插入数据之前,先查询一下数据库中是否有相同的记录,如果有不执行,如果没有再执行
3、通过事务来控制追问
1和3能否给出代码啊?
我使用就是第2种方法啊
此话怎讲?
追答当你设定成唯一,那样就无法再插入一个具有相同keyword数据到表中,即使执行插入动作,也是无法保存数据
追问怎么设定唯一呢?求教,给出代码
追答点击图片上面那个大写红色 “U”就行
追问你发的图片是PHPMYADMIN的吧?我没装这个,直接用的Navicat for mysql
追答ALTER TABLE 表 ADD UNIQUE (
`keyword`
)
以上是关于MYSQL数据库,老是被插入重复记录,怎么解决?(附代码)的主要内容,如果未能解决你的问题,请参考以下文章