您的位置:首页 > 数据库 > MySQL

mysql sql 防止重复插入相同的记录实例

2016-11-11 14:49 357 查看
本人小菜鸟一只,为了自我学习和交流PHP(jquery,linux,lamp,shell,javascript,服务器)等一系列的知识,小菜鸟创建了一个群。希望光临本博客的人可以进来交流。寻求共同发展。搭建平台。本人博客也有许多的技术文档,希望可以为你提供一些帮助。

QQ群: 191848169


首页我们来看看防止页面重复刷新插入防止方法

方法:

表单页setcookie("pass","ok");

处理页

if($_COOKIE["pass"]=="ok"){

mysql_query("insert inot .....");

}

else{

  echo "页面已经过期,请不要重复刷新";

  exit;

}

setcookie("pass","");

再者来看看在mysql操作时的防止重复插入数据的有效方法

如果表中包含有一个自动递增字段AUTO_INCREMENT,并用 INSERT ... UPDATE 插入一行,函数 LAST_INSERT_ID()会返回AUTO_INCREMENT的值,如果这个语句更新某一行, LAST_INSERT_ID() 就没有意义了。但是,你可以通过用 LAST_INSERT_ID(expr)使它变得有意义,假如id字段是自动递增栏的话,使 LAST_INSERT_ID() 对更新语句有意义的方法如下:

INSERT INTO table (a,b,c) VALUES (1,2,3)  ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;

ON DUPLICATE KEY UPDATE命令语句,那么在唯一索引或者主索引的作用下将不插入与数据库教程记录重复的内容,但同时会更新数据库中的旧记录。例如,字段a被声明为唯一索引并且里面只包含有值为1的记录,以下两个语句会达到同样的效果:

一、INSERT INTO table (a,b,c) VALUES (1,2,3)    ON DUPLICATE KEY UPDATE c=c+1;

二、UPDATE table SET c=c+1 WHERE a=1;

可以在插入更新语句 INSERT ... UPDATE 中使用 VALUES(字段名) 函数去关联某一行记录。也就是说, VALUES(字段名) 可以用在UPDATE语句中去更新某字段的值而不会出现重复键。这个函数在多行插入中尤其有用。但是函数 VALUES() 仅当用在 INSERT ... UPDATE 语句中才有意义,否则会返回NULL。例如:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)  ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

其它方法

insert into songinfo(songname,songtime,songpath) select 'aaa','bb' ,'cc' from dual where not exists(select * from songinfo where songname='123')

//上述命令在MYSQL3.x版本上不能执行,5.0.24的可以

比如我的Mysql当中某database存在url这张表,现在要有C API 将url,url_hash,domain这三个变量的值插入到数据库中,url_hash是主键,本来为了不至插入重复项,应该判断一下的,现在只要这一条SQL语句就行了,什么都不要管,减少了大量的查询和判断工作,我只能说一句:太爽了。如下:

SQL语句:

insert into TABLE(FIELD0,FIELD1...) select VALUE0,VALUE1 ,... from dual where not exists(select * from TABLE where FIELDN=VALUEN)

代码:

int store_url(char *url)

{

char *key, url_hash[HASHLEN], domain[DOMAINLEN], sqlstr[SQLSTRLEN];

......

sprintf (sqlstr, "insert into url(url,url_hash,domain) select '%s','%s','%s' from dual where not exists(select * from url where url_hash='%s') ", url, url_hash, domain, url_hash);

if (mysql_query (conn, sqlstr)) //大部分情况下失败是由于数据库关闭,所以可以在以下添加上再连接MySQL的代码,不赘写!

    {                                                                               

    printf ("Error:%sn", mysql_error (conn));

    return;

    }

}

最后有一种比较简单的方法就是先查询当前的数据在数据库是否有相同的,如果有的话就提示如

*/

$title ='www.111cn.net';

$sql = "Select * from tablename where title='$title'";

$query = mysql_query( $sql );

if( mysql_num_rows( $query ) )

{

 exit('不能重复插入相同的记录');

}

else

{

 $sql ="insert tablename values('$title')";

  mysql_query( $sql );

  exit('保存记录成功');

}

//这种方的不好之处在于多次查询了数据库,并且代码也冗余了,好了到底你用那排除重复数据的方法你自己根据自己的情况而定吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: