mysql 重复数据防止插入:)

insert into table (id, name, age) values(1, "A", 19) on duplicate key update name=values(name), age=values(age)

/* 插入数据:如果有重复的则选择更新; */

insert ignore into `testtable` (`mpass`,`pass`) select mpass,pass from rr_pass_0 limit 0,1000000
replace into `testtable` (`mpass`,`pass`) select mpass,pass from rr_pass_0 limit 0,10

//设置主键:如果有重复的数据选择丢弃;

select *, count(distinct name) from table group by name

//查询出重复的数据

这几天写了个导入脚本;留个笔记;

<?php
error_reporting(0);
ini_set(‘memory_limit‘, ‘1024M‘);
header(‘Content-type: text/html;charset=UTF-8‘);
$db_host = "127.0.0.1";
$db_user = "root";
$db_pass = "";
$db_database = "qq";
$table = "import_table"; //导入的库

$tables = "query_tablle"; //查询的库
//62300000,100000
$dump_num = "100"; //按照一次10W的标准;
$db = new db($db_host,$db_user,$db_pass,$db_database);
//$test = $db->query("insert into testtables (a) values (‘145646464‘)");
$start_num =5305950 ;//开始位置;
$tables_query = $db->query("select count(*) from $tables");//查询总数
$tables_count_array = $db->sql_array($tables_query);
$tables_count_num = $tables_count_array[0];
$counts = intval($tables_count_num /  $dump_num);
$counts = $counts + 1;
$counts = 10000;
for($i=0;$i<$counts;$i++){
	//echo ("select `pass` from rr1_pass limit $start_num,$dump_num ")."<br \>";
				$start_time = microtime(true);
	$sql_oking = $db->query("select `pass` from `$tables` limit $start_num,$dump_num ");
	while($sql_oking_array = $db->sql_array($sql_oking)){

		$pass = $sql_oking_array[‘pass‘];
		$check = $db->query("select pass from `$table` where pass = \"$pass\" limit 0,1 ");
		$check = $db->sql_nums($check);

		if(!empty($pass) && !$check ) {
		$md5 = md5($pass);
		$md5_2 = md5($pass);
		$db->query("insert into $table (md5,md5_2,pass) values (‘".$md5."‘,‘".$md5_2."‘,‘".$pass."‘) ") ;}
		}

					$end_time = microtime(true);
					$time = $end_time - $start_time ;
					echo "$start_num,$dump_num db_write runtime:".$time."s\r\n";
					$start_num = $start_num+$dump_num;
}

class db{
		private $db_host;
		private $db_user;
		private $db_pass;
		private $db_conn;
		private $db_database;
		private $sql;
		private $result;

		public function __construct($db_host,$db_user,$db_pass,$db_database,$db_conn = ‘‘ ){
				$this->db_host = $db_host;
				$this->db_user = $db_user;
				$this->db_pass = $db_pass;
				$this->db_database = $db_database;
				$this->db_conn = $db_conn;
				$this->connect();

			}
		public function connect(){

			$this->db_conn = @mysql_connect($this->db_host,$this->db_user,$this->db_pass);
			if(!$this->db_conn) {echo "mysql connect not okay!";}

			if(!mysql_select_db($this->db_database,$this->db_conn)){echo "select database not okay!";}

		}
		public function query($sql){
			$this->sql = $sql;
			$result = mysql_query($this->sql,$this->db_conn);
			$this->result = $result;
			#if(!$this->result){echo "sql query is not okay!";} exit;
			return $this->result;
		}
		public function sql_array($str = ‘‘){
			if($str !=‘‘){ return mysql_fetch_array($str);}else{ return mysql_fetch_array($this->result);}
		}
		public function sql_nums($sql){
			return mysql_num_rows($sql);
		}
		public function free(){
			@mysql_free_result($this->result);
		}
		public function __destruct(){
			if(!empty($this->result)){
					$this->free();
			}
			mysql_close($this->db_conn);
		}
}

?>

  

时间: 2024-10-11 14:01:41

mysql 重复数据防止插入:)的相关文章

删除MySQL重复数据

原文:删除MySQL重复数据 删除MySQL重复数据 项目背景 在最近做的一个linux性能采集项目中,发现线程的程序入库很慢,再仔细定位,发现数据库里面很多冗余数据.因为在采集中,对于同一台设备,同一个时间点应该只有一个数据,然而,数据库中存入了多个数据.对于如何造成了这个结果,一时没有想清楚,但为了解决入库慢的问题,首先要删除冗余数据. 问题描述 数据库的表结构很简单,如下: +----------------+--------------+------+-----+---------+--

mysql大数据量插入参考

Mysql 千万数据10秒批量插入只需三步第一步:配置my.ini文件文件中配置bulk_insert_buffer_size=120M 或者更大将insert语句的长度设为最大.Max_allowed_packet=1MNet_buffer_length=8k保存第二步:查看设置的参选有没有生效.Mysql > SHOW VARIABLES;bulk_insert_buffer_size默认是8M,我们要把它调成100M或百兆以上,也不要太大.第三步:完成设置后,批量插入数据时使用多条模式.I

php+mysql实现数据分批插入

上周需要将云端的数据有条件的录入到mysql中,最开始是使用遍历数据然后一条条的插入的笨方法,结果速度慢的要死,所以又随便写了个笨方法2.0,记录一下自己菜鸟的成长历程.同时这也是在博客园的第一篇文章,目的仅仅是单纯的记录一下自己的狗屎代码,因为我是菜鸟,哈哈... 比如说有10001条数据,每次插入1000条,分11次插入完成,代码如下: 1 <?php 2 /** 3 * Created by PhpStorm. 4 * User: Soup 5 * Date: 2016/12/29 6 *

mysql重复数据下,删除一条重复数据

delete from information where id in (select id from (select max(id) as id,count(*) as ccc from information GROUP BY encoding HAVING ccc>1 ) as tab)

mysql 删除重复数据

如题:mysql 数据库删除重复数据 因为是mysql 所以其他数据哭的命令在mysql 中是不能使用的.不要想当然的使用sql 脚本 delete from table1 where field1 in (select field1 from table1 group by field1 having count(field1) > 1) and rowid not in (select min(rowid) from table1 group by field1 having count(f

MySQL 处理重复数据

有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 本博文我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据. 防止表中出现重复数据 你可以在MySQL数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性. 让我们尝试一个实例:下表中无索引及主键,所以该表允许出现多条重复记录. CREATE TABLE person_tbl ( first_name CH

MySQL 大数据量快速插入方法和语句优化

MySQL大数据量快速插入方法和语句优化是本文我们主要要介绍的内容,接下来我们就来一一介绍,希望能够让您有所收获! INSERT语句的速度 插入一个记录需要的时间由下列因素组成,其中的数字表示大约比例: 连接:(3) 发送查询给服务器:(2) 分析查询:(2) 插入记录:(1x记录大小) 插入索引:(1x索引) 关闭:(1) 这不考虑打开表的初始开销,每个并发运行的查询打开. 表的大小以logN (B树)的速度减慢索引的插入. 加快插入的一些方法 如果同时从同一个客户端插入很多行,使用含多个VA

雷林鹏分享:MySQL 处理重复数据

有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数据. 本章节我们将为大家介绍如何防止数据表出现重复数据及如何删除数据表中的重复数据. 防止表中出现重复数据 你可以在MySQL数据表中设置指定的字段为 PRIMARY KEY(主键) 或者 UNIQUE(唯一) 索引来保证数据的唯一性. 让我们尝试一个实例:下表中无索引及主键,所以该表允许出现多条重复记录. CREATE TABLE person_tbl ( first_name CH

Mysql千万级别数据批量插入,性能提高

-----------------------------------------------------------方式1 ---------------------------------------------------------------------------------------- 第一步:配置my.ini文件 文件中配置 bulk_insert_buffer_size=120M 或者更大 将insert语句的长度设为最大. Max_allowed_packet=1M Net