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


mysql教程 sql 防止重复插入相同的记录实例
 
首页我们来看看防止页面重复刷新插入防止方法
 
方法:
 表单页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('保存记录成功');
 }
 //这种方的不好之处在于多次查询了数据库,并且代码也冗余了,好了到底你用那排除重复数据的方法你自己根据自己的情况而定吧。

 


你可能感兴趣的文章

一条mysql 存在该记录则更新,不存在则插入记录的sql
 
三种返回mysql 插入一条记录返回该记录id方法
 
mysql 正则表达式查询与实例
 
sql 查询指定日期时间记录sql语句与查询实例
 
mysql 数据表合并并且只重复数据只读取一条
 
mysql 存储过程实例
 
mysql Replace INTO 实例教程
 
mysql replace 实例教程
 
mysql 提高查询速度实例
 
mysql Left Join, Inner Join实例教程
 
mysql常用的日期加减函数与实例教程
 
mysql 修改GROUP BY 实例
 
mysql SQL Alias用法及Alias(别名)语法
更多详细内容请查看:http://www.111cn.net/database/110/sql-mysql-duplicate-key.htm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值